Advertisement
Guest User

Untitled

a guest
Aug 6th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {-# LANGUAGE GADTs #-}
  2.  
  3. module Lib where
  4.  
  5. import Data.Map.Strict
  6.  
  7. data Value
  8.     = ValueBool Bool
  9.     | ValueText String
  10.  
  11. data Expr t where
  12.     ExprBool :: Bool -> Expr Bool
  13.     ExprBoolOr :: Expr Bool -> Expr Bool -> Expr Bool
  14.     ExprText :: String -> Expr String
  15.     ExprTextAppend :: Expr String -> Expr String -> Expr String
  16.     ExprObject :: Map String Value -> String -> Expr Value
  17.  
  18. eval :: Expr t -> t
  19. eval (ExprBool value) = value
  20. eval (ExprBoolOr (ExprBool lft) (ExprBool rgt)) = lft || rgt
  21. eval (ExprText value) = value
  22. eval (ExprTextAppend (ExprText lft) (ExprText rgt)) = lft <> rgt
  23. eval (ExprObject map fieldName)
  24.     = case map ! fieldName of
  25.         ValueBool boolValue -> ???
  26.         ValueText textValue -> ???
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement