You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Apr 1, 2025. It is now read-only.
eval0:: (Has (Envaddr) sigm, HasLabelledStore (Storeaddrval) sigm, Has (Domval) sigm, Has (ReaderReference) sigm, HasS.Statementsigm) =>Term->mval
61
+
eval0:: (Has (Envaddr) sigm, HasLabelledStore (Storeaddrval) sigm, Has (Domval) sigm, Has (ReaderReference) sigm, HasS.Statementsigm, MonadFailm) =>Term->mval
57
62
eval0 = fix eval
58
63
59
64
eval
60
-
:: (Has (Envaddr) sigm, HasLabelledStore (Storeaddrval) sigm, Has (Domval) sigm, Has (ReaderReference) sigm, HasS.Statementsigm)
65
+
:: (Has (Envaddr) sigm, HasLabelledStore (Storeaddrval) sigm, Has (Domval) sigm, Has (ReaderReference) sigm, HasS.Statementsigm, MonadFailm)
61
66
=> (Term->mval)
62
67
-> (Term->mval)
63
68
eval eval =\case
64
-
T.Var n -> lookupEnv n >>=maybe (dvar n) fetch
65
-
T.Term s ->case s of
66
-
Noop-> dunit
67
-
Iff c t e ->do
68
-
c' <- eval c
69
-
dif c' (eval t) (eval e)
70
-
Bool b -> dbool b
71
-
String s -> dstring s
72
-
Throw e -> eval e >>= ddie
73
-
Let n v b ->do
74
-
v' <- eval v
75
-
let' n v' (eval b)
76
-
t :>> u ->do
77
-
t' <- eval t
78
-
u' <- eval u
79
-
t' D.>>> u'
80
-
Import ns ->S.simport ns >> dunit
81
-
Function n ps b -> letrec n (dabs ps (foldr (\ (p, a) m -> let' p a m) (eval b) .zip ps))
82
-
Call f as ->do
83
-
f' <- eval f
84
-
as' <-traverse eval as
85
-
dapp f' as'
86
-
Locate s t -> local (setSpan s) (eval t)
69
+
Module (Py.Module ss) -> suite ss
70
+
Statement (Py.Import is sp) -> setSpan sp $do
71
+
for_ is $\Py.ImportItem{ Py.import_item_name = ns } ->case nonEmpty ns of
72
+
Nothing->pure()
73
+
Just ss ->S.simport (pack .Py.ident_string <$> ss)
74
+
dunit
75
+
Statement (Py.Pass sp) -> setSpan sp dunit
76
+
Statement (Py.Conditional cts e sp) -> setSpan sp $foldr (\ (c, t) e ->do
77
+
c' <- eval (Expr c)
78
+
dif c' (suite t) e) (suite e) cts
79
+
Statement (Py.Raise (Py.RaiseV3 e) sp) -> setSpan sp $case e of
80
+
Just (e, _) -> eval (Expr e) >>= ddie -- FIXME: from clause
81
+
Nothing-> dunit >>= ddie
82
+
-- FIXME: RaiseV2
83
+
Statement (Py.StmtExpr e sp) -> setSpan sp (eval (Expr e))
84
+
Statement (Py.Fun n ps _r ss sp) ->let ps' = mapMaybe (\ p ->case p of { Py.Param n _ _ _ ->Just (ident n) ; _ ->Nothing}) ps in setSpan sp $ letrec (ident n) (dabs ps' (foldr (\ (p, a) m -> let' p a m) (suite ss) .zip ps'))
85
+
Expr (Py.Var n sp) -> setSpan sp $let n' = ident n in lookupEnv n' >>=maybe (dvar n') fetch
0 commit comments