summaryrefslogtreecommitdiff
path: root/src/Script/Expr/Class.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Script/Expr/Class.hs')
-rw-r--r--src/Script/Expr/Class.hs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Script/Expr/Class.hs b/src/Script/Expr/Class.hs
index 64b4241..20a92b4 100644
--- a/src/Script/Expr/Class.hs
+++ b/src/Script/Expr/Class.hs
@@ -5,6 +5,7 @@ module Script.Expr.Class (
ExprEnumerator(..),
) where
+import Data.Maybe
import Data.Scientific
import Data.Text (Text)
import Data.Text qualified as T
@@ -18,6 +19,12 @@ class Typeable a => ExprType a where
recordMembers :: [(Text, RecordSelector a)]
recordMembers = []
+ exprExpansionConvTo :: ExprType b => Maybe (a -> b)
+ exprExpansionConvTo = Nothing
+
+ exprExpansionConvFrom :: ExprType b => Maybe (b -> a)
+ exprExpansionConvFrom = Nothing
+
exprListUnpacker :: proxy a -> Maybe (ExprListUnpacker a)
exprListUnpacker _ = Nothing
@@ -36,12 +43,20 @@ instance ExprType Integer where
textExprType _ = T.pack "integer"
textExprValue x = T.pack (show x)
+ exprExpansionConvTo = listToMaybe $ catMaybes
+ [ cast (T.pack . show :: Integer -> Text)
+ ]
+
exprEnumerator _ = Just $ ExprEnumerator enumFromTo enumFromThenTo
instance ExprType Scientific where
textExprType _ = T.pack "number"
textExprValue x = T.pack (show x)
+ exprExpansionConvTo = listToMaybe $ catMaybes
+ [ cast (T.pack . show :: Scientific -> Text)
+ ]
+
instance ExprType Bool where
textExprType _ = T.pack "bool"
textExprValue True = T.pack "true"