Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {-# LANGUAGE GADTs #-}
- module Lib where
- import Data.Map.Strict
- data Value
- = ValueBool Bool
- | ValueText String
- data Expr t where
- ExprBool :: Bool -> Expr Bool
- ExprBoolOr :: Expr Bool -> Expr Bool -> Expr Bool
- ExprText :: String -> Expr String
- ExprTextAppend :: Expr String -> Expr String -> Expr String
- ExprObject :: Map String Value -> String -> Expr Value
- eval :: Expr t -> t
- eval (ExprBool value) = value
- eval (ExprBoolOr (ExprBool lft) (ExprBool rgt)) = lft || rgt
- eval (ExprText value) = value
- eval (ExprTextAppend (ExprText lft) (ExprText rgt)) = lft <> rgt
- eval (ExprObject map fieldName)
- = case map ! fieldName of
- ValueBool boolValue -> ???
- ValueText textValue -> ???
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement