]> gitweb @ CieloNegro.org - hs-rrdtool.git/commitdiff
revised HLength
authorPHO <pho@cielonegro.org>
Fri, 23 Apr 2010 09:50:54 +0000 (18:50 +0900)
committerPHO <pho@cielonegro.org>
Fri, 23 Apr 2010 09:50:54 +0000 (18:50 +0900)
Data/HList.hs
Data/HList/Prelude.hs
Data/HList/String.hs
Database/RRDtool/Create.hs
Database/RRDtool/Expression.hs

index e1e7769e63c6f5ad00a029623be927382cd0fb36..e39fb954337c6d93d766c3dde0def5a88b9cc1aa 100644 (file)
@@ -18,6 +18,8 @@ module Data.HList
 
     , HConcat
     , HMap
+
+    , HLength
     )
     where
 
index 3ab596ffb1e45c2aacf9484384b5f9334e454f81..c63be3ab5d486cae5c20f4fa35db3231e50c1249 100644 (file)
@@ -28,7 +28,7 @@ module Data.HList.Prelude
     , HConcatable(..)
     , HMappable(..)
 
-    , HLength(..)
+    , HLength
     )
     where
 
@@ -158,16 +158,6 @@ instance ( Applyable f x
     hMap f (HCons x xs) = hCons (apply f x) (hMap f xs)
 
 -- HLength
-class IntegerT (HLengthOf l) => HLength l where
-    type HLengthOf l
-    hLength :: Integral n => l -> n
-
-instance HLength HNil where
-    type HLengthOf HNil = D0
-    hLength _ = 0
-
-instance ( HLength l
-         , IntegerT (Succ (HLengthOf l))
-         ) => HLength (HCons e l) where
-    type HLengthOf (HCons e l) = Succ (HLengthOf l)
-    hLength (HCons _ l) = 1 + hLength l
+type family HLength l
+type instance HLength HNil        = D0
+type instance HLength (HCons e l) = Succ (HLength l)
index e3f878a25b69a8ecb82109dca957cc3c6d56c75a..6d4d52ddfeba32fbaaad0c5488027a8ce81c1bd1 100644 (file)
@@ -11,11 +11,17 @@ import Types.Data.Num.Decimal.Literals.TH
 import Types.Data.Num.Ops
 
 
-class HString s
+class (Show s, Eq s) => HString s
 
 instance HString HNil
 
-instance IntegerT c => HString (HCons c s)
+instance ( Show c
+         , Show s
+         , Eq c
+         , Eq s
+         , IntegerT c
+         )
+    => HString (HCons c s)
 
 hString :: QuasiQuoter
 hString = QuasiQuoter quoteStrExp quoteStrPat
index cb41c211aa7912d01c6ff04e1a6703c5ca9ad2c1..a3b51e54171d74e14d1ad822ece4fd8281a0c870 100644 (file)
@@ -11,7 +11,7 @@ module Database.RRDtool.Create
 
     -- Database.RRDtool.Expression
     , Constant(..)
-    , IsVarName(..)
+    , IsVarName
     , Variable(..)
     , CommonUnaryOp(..)
     , CommonBinaryOp(..)
index 669acbca32adffa985f93c652b4e60cc5823f39e..ec5b23adc20b6fab4c1f280edfa02dd828219957 100644 (file)
@@ -11,7 +11,7 @@ module Database.RRDtool.Expression
     , IsCommonExprSet
 
     , Constant(..)
-    , IsVarName(..)
+    , IsVarName
     , Variable(..)
     , IsVariableSet
     , CommonUnaryOp(..)
@@ -29,6 +29,7 @@ module Database.RRDtool.Expression
     where
 
 import Data.HList
+import Data.HList.String
 
 
 -- MentionedVars
@@ -66,8 +67,13 @@ instance IsCommonExpr Constant
 instance MentionedVars Constant where
     type MentionedVarsOf Constant = HNil
 
-class (Show a, Eq a, Ord a) => IsVarName a where
-    varName :: a -> String
+{- This is what we want to do but GHC can't handle this for now. 
+class ( (HLengthOf a :<=: D255) ~ True
+      , HString a
+      )
+    => IsVarName a
+-}
+class HString a => IsVarName a
 
 data Variable vn
     = Variable !vn