GroteTrap

From HaskellWiki
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