GroteTrap
Revision as of 13:13, 28 June 2008 by MartijnVanSteenbergen (talk | contribs) (updated logicLanguage to reflect the new API)
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