aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordan <[email protected]>2024-04-20 15:20:38 -0400
committerdan <[email protected]>2024-04-20 18:14:14 -0400
commit678ec67fd43a04e5aa237923a7307e2c8635c2e1 (patch)
tree781937cac742e0460c92918e85b98c885bfae153
parent7085e9f67ac470cea790232513cd465ee7443e70 (diff)
downloadbizexp-678ec67fd43a04e5aa237923a7307e2c8635c2e1.tar.gz
bizexp-678ec67fd43a04e5aa237923a7307e2c8635c2e1.tar.bz2
bizexp-678ec67fd43a04e5aa237923a7307e2c8635c2e1.zip
chore: remove unused MyLib.hs file
-rwxr-xr-xsrc/MyLib.hs95
1 files changed, 0 insertions, 95 deletions
diff --git a/src/MyLib.hs b/src/MyLib.hs
deleted file mode 100755
index c8dc95d..0000000
--- a/src/MyLib.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-module BizExpr (repl, eval) where
-
-import Data.Maybe (fromMaybe)
-import Text.Read (readMaybe)
-
---import Data.Text as T
-
-repl :: IO ()
-repl = getLine >>= putStrLn . maybe "Failed to evaluate expression" show . eval >> repl
-
-eval :: String -> Maybe Integer
-eval x = coerceTo =<< evalAst . head . fst =<< parseLevel x
-
-data Value = IntVal Integer | StrVal String | BoolVal Bool
- deriving (Show)
-
-class CoerceTo a where
- coerceTo :: Value -> Maybe a
- coerceFrom :: a -> Value
-
-instance CoerceTo Integer where
- coerceTo (IntVal n) = Just n
- coerceTo (StrVal s) = readMaybe s
- coerceTo (BoolVal True) = Just 1
- coerceTo (BoolVal False) = Just 0
-
- coerceFrom = IntVal
-
-instance CoerceTo Bool where
- coerceTo (BoolVal v) = Just v
- coerceTo (IntVal v) = Just $ v /= 0
- coerceTo (StrVal "True") = Just True
- coerceTo (StrVal "true") = Just True
- coerceTo v = coerceTo . IntVal =<< (coerceTo v :: Maybe Integer) :: Maybe Bool
-
- coerceFrom = BoolVal
-
-type Name = String
-
-data Ast
- = Expr Name [Ast]
- | Val Value
- deriving (Show)
-
-parseLevel :: String -> Maybe ([Ast], String)
-parseLevel = go "" (Just [])
- where
- go :: String -> Maybe [Ast] -> String -> Maybe ([Ast], String)
- go prev (Just l) ('(' : next) = case parseLevel next of
- Nothing ->
- Nothing
- Just (arg, remnant) ->
- let r = if remnant /= "" && head remnant == ',' then tail remnant else remnant
- in go "" (Just (l ++ [Expr prev arg])) r
- go prev (Just l) (')' : remnant) =
- let l0 = [Val $ StrVal prev | prev /= ""]
- in Just (l ++ l0, remnant)
- go prev (Just l) (',' : next) =
- let l0 = [Val $ StrVal prev]
- in go "" (Just (l ++ l0)) next
- go "" (Just l) "" =
- Just (l, "")
- go prev (Just l) "" =
- Just (l ++ [Val $ StrVal prev], "")
- go prev l (x : xs) =
- go (prev ++ [x]) l xs
-
-evalAst :: Ast -> Maybe Value
-evalAst (Expr name ast) = fromMaybe Nothing (getFunc name <*> evalLevel ast)
-evalAst (Val val) = Just val
-
-evalLevel :: [Ast] -> Maybe [Value]
-evalLevel = mapM evalAst
-
-getFunc :: String -> Maybe ([Value] -> Maybe Value)
-getFunc "sum" = Just eSum
-getFunc "any" = Just eAny
-getFunc "all" = Just eAll
-getFunc _ = Nothing
-
-eSum :: [Value] -> Maybe Value
-eSum = eFold (+) (0 :: Integer)
-
-eAny :: [Value] -> Maybe Value
-eAny = eFold (||) False
-
-eAll :: [Value] -> Maybe Value
-eAll = eFold (&&) True
-
-eFold :: (CoerceTo a, CoerceTo b) => (b -> a -> b) -> b -> [Value] -> Maybe Value
-eFold fn init [] = Just $ coerceFrom init
-eFold fn init (x : xs) =
- let b = coerceTo =<< eFold fn init xs
- a = coerceTo x
- in coerceFrom <$> (fn <$> b <*> a)