summaryrefslogtreecommitdiff
path: root/src/Script
diff options
context:
space:
mode:
Diffstat (limited to 'src/Script')
-rw-r--r--src/Script/Expr.hs8
-rw-r--r--src/Script/Expr/Class.hs15
2 files changed, 23 insertions, 0 deletions
diff --git a/src/Script/Expr.hs b/src/Script/Expr.hs
index e8f6993..0c401e2 100644
--- a/src/Script/Expr.hs
+++ b/src/Script/Expr.hs
@@ -34,6 +34,8 @@ import Data.Foldable
import Data.List
import Data.Map (Map)
import Data.Map qualified as M
+import Data.Maybe
+import Data.Scientific
import Data.String
import Data.Text (Text)
import Data.Text qualified as T
@@ -425,6 +427,12 @@ instance ExprType Regex where
textExprType _ = T.pack "regex"
textExprValue _ = T.pack "<regex>"
+ exprExpansionConvFrom = listToMaybe $ catMaybes
+ [ cast (RegexString)
+ , cast (RegexString . T.pack . show @Integer)
+ , cast (RegexString . T.pack . show @Scientific)
+ ]
+
regexCompile :: Text -> Either String Regex
regexCompile src = either Left (Right . RegexCompiled src) $ RE.compile RE.defaultCompOpt RE.defaultExecOpt $
T.singleton '^' <> src <> T.singleton '$'
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"