octopus-0.0.2.0: Language/Octopus/Libraries.hs
module Language.Octopus.Libraries where
import Import
import Language.Octopus.Data
import Language.Octopus.Data.Shortcut
import Language.Octopus.Basis
initialEnv = mkOb [
(intern "__let__", letDef)
, (intern "__open__", openDef)
--- Exceptions --- TODO give builtin literals
, (intern "TypeError", exnTypeError)
, (intern "MatchFailure", exnMatchFail)
, (intern "DivZero", exnDivZero)
]
letDef = Cl
(mkSq [mkOb [], mkSy "x"])
(mkCall (Pr Vau) (mkSq [mkSy "val",
mkCall (Pr Vau) (mkSq [mkSq [mkSy "e", mkSy "body"],
mkCall (Pr Eval) (mkSq
[ mkCall (Pr Extends) (mkSq
[ mkCall (Pr Match) (mkSq [mkSy "x", mkCall (Pr Eval) (mkSy "val")])
, mkSy "e"])
, mkSy "body"])])]))
(mkOb [])
openDef = Cl
(mkSy "env")
(mkCall (Pr Vau) (mkSq [mkSq [mkSy "static", mkSy "body"],
mkCall (Pr Eval) (mkSq
[ mkCall (Pr Extends) (mkSq
[ mkCall (Pr Eval) (mkSy "env")
, mkSy "static"])
, mkSy "body"])]))
(mkOb [])