]> gitweb @ CieloNegro.org - hs-rrdtool.git/commitdiff
IsShortEnoughForVarName
authorPHO <pho@cielonegro.org>
Fri, 23 Apr 2010 12:16:37 +0000 (21:16 +0900)
committerPHO <pho@cielonegro.org>
Fri, 23 Apr 2010 12:16:37 +0000 (21:16 +0900)
Database/RRDtool/Expression.hs

index ec5b23adc20b6fab4c1f280edfa02dd828219957..499a580753c6a17e4d049a36e9ebbc3828ab93f0 100644 (file)
@@ -10,8 +10,11 @@ module Database.RRDtool.Expression
     , IsExprSet
     , IsCommonExprSet
 
-    , Constant(..)
     , IsVarName
+    , IsShortEnoughForVarName
+    , IsGoodLetterForVarName
+
+    , Constant(..)
     , Variable(..)
     , IsVariableSet
     , CommonUnaryOp(..)
@@ -30,6 +33,9 @@ module Database.RRDtool.Expression
 
 import Data.HList
 import Data.HList.String
+import Types.Data.Bool
+import Types.Data.Num hiding ((:*:))
+import Types.Data.Ord
 
 
 -- MentionedVars
@@ -68,13 +74,37 @@ instance MentionedVars Constant where
     type MentionedVarsOf Constant = HNil
 
 {- This is what we want to do but GHC can't handle this for now. 
-class ( (HLengthOf a :<=: D255) ~ True
-      , HString a
+class ( (HLengthOf str :<=: D255) ~ True
+      , HString str
       )
-    => IsVarName a
+    => IsVarName str
 -}
-class HString a => IsVarName a
+class ( IsShortEnoughForVarName str
+      , HString str
+      )
+    => IsVarName str
+
+class HString str => IsShortEnoughForVarName str
+instance ( HString str
+         , (HLength str :<=: D255) ~ True
+         )
+    => IsShortEnoughForVarName str
+
+class IntegerT c => GoodLetterForVarName c where
+    type IsGoodLetterForVarName c
+
+instance IntegerT c => GoodLetterForVarName c where
+    type IsGoodLetterForVarName c = ( (c :>=: D65) :&&: (c :<=:  D90) ) -- A-Z
+                                    :||:
+                                    ( (c :>=: D99) :&&: (c :<=: D122) ) -- a-z
+                                    :||:
+                                    ( c :==: D45 ) -- '-'
+                                    :||:
+                                    ( c :==: D95 ) -- '_'
+
+--instance (a :>=: D65) ~ True => IsGoodLetterForVarName a
 
+-- Variable
 data Variable vn
     = Variable !vn
     deriving (Show, Eq, Ord)