GroteTrap
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
GroteTrap allows you to quickly define expression languages. It is available for download on Hackage.
Example: Logic
data Logic
= Var String
| Or [Logic]
| And [Logic]
| Impl Logic Logic
| Not Logic
deriving (Show, Eq)
logicLanguage :: Language Logic
logicLanguage = language
{ variable = Var
, operators =
[ Unary Not Prefix 0 "!"
, Assoc And 1 "&&"
, Assoc Or 2 "||"
, Binary Impl InfixR 3 "->"
]
}
With this, we can do:
> readExpression logicLanguage "p && q -> r"
Impl (And [Var "p",Var "q"]) (Var "r")
Example: Arithmetic
arith :: Language Int
arith = language
{ number = id
, operators =
[ Assoc sum 2 "+"
, Binary (-) InfixL 2 "-"
, Assoc product 1 "*"
, Binary div InfixL 1 "/"
, Binary (^) InfixL 0 "^"
]
, functions = [ function1 abs "abs" ]
}
evalArith :: String -> Int
evalArith = readExpression arith
> evalArith "abs(2 - 3) + abs(4 - 5)"
2