@@ -1,57 +1,57 @@
1−module main;
1+module main
3instance Applicative Maybe where {
3instance Applicative Maybe where {
4− (Just f) <$> (Just a) = Just (f a);
4+ (Just f) <$> (Just a) = Just (f a)
5− Nothing <$> Nothing = Nothing;
5+ Nothing <$> Nothing = Nothing
7− pure x = Just x;
7+ pure x = Just x
10data Expr = Var String
10data Expr = Var String
12− | Add Expr Expr;
12+ | Add Expr Expr
15data Eval : Set -> Set where
15data Eval : Set -> Set where
16− MkEval : (List (String, Int) -> Maybe a) -> Eval a;
16+ MkEval : (List (String, Int) -> Maybe a) -> Eval a
18−fetch : String -> Eval Int;
18+fetch : String -> Eval Int
19fetch x = MkEval (\e => fetchVal e) where {
19fetch x = MkEval (\e => fetchVal e) where {
20− fetchVal : List (String, Int) -> Maybe Int;
20+ fetchVal : List (String, Int) -> Maybe Int
21− fetchVal [] = Nothing;
21+ fetchVal [] = Nothing
22− fetchVal ((v, val) :: xs) = if (x == v) then (Just val) else (fetchVal xs);
22+ fetchVal ((v, val) :: xs) = if (x == v) then (Just val) else (fetchVal xs)
25instance Functor Eval where {
25instance Functor Eval where {
26− fmap f (MkEval g) = MkEval (\e => fmap f (g e));
26+ fmap f (MkEval g) = MkEval (\e => fmap f (g e))
29instance Applicative Eval where {
29instance Applicative Eval where {
30− pure x = MkEval (\e => Just x);
30+ pure x = MkEval (\e => Just x)
32 (<$>) (MkEval f) (MkEval g) = MkEval (\x => appAux (f x) (g x)) where {
32 (<$>) (MkEval f) (MkEval g) = MkEval (\x => appAux (f x) (g x)) where {
33− appAux : Maybe (a -> b) -> Maybe a -> Maybe b;
33+ appAux : Maybe (a -> b) -> Maybe a -> Maybe b
34− appAux (Just fx) (Just gx) = Just (fx gx);
34+ appAux (Just fx) (Just gx) = Just (fx gx)
35− appAux _ _ = Nothing;
35+ appAux _ _ = Nothing
39−eval : Expr -> Eval Int;
39+eval : Expr -> Eval Int
40−eval (Var x) = fetch x;
40+eval (Var x) = fetch x
41−eval (Val x) = [| x |];
41+eval (Val x) = [| x |]
42−eval (Add x y) = [| eval x + eval y |];
42+eval (Add x y) = [| eval x + eval y |]
44−runEval : List (String, Int) -> Expr -> Maybe Int;
44+runEval : List (String, Int) -> Expr -> Maybe Int
45runEval env e with eval e {
45runEval env e with eval e {
46− | MkEval envFn = envFn env;
46+ | MkEval envFn = envFn env
49−main : IO ();
49+main : IO ()
50−main = do { print [| (*2) (Just 4) |];
50+main = do { print [| (*2) (Just 4) |]
51− print [| plus (Just 4) (Just 5) |];
51+ print [| plus (Just 4) (Just 5) |]
52− print (runEval [("x",21), ("y", 20)] (Add (Val 1) (Add (Var "x") (Var "y"))));
52+ print (runEval [("x",21), ("y", 20)] (Add (Val 1) (Add (Var "x") (Var "y"))))
53− print (runEval [("x",21)] (Add (Val 1) (Add (Var "x") (Var "y"))));
53+ print (runEval [("x",21)] (Add (Val 1) (Add (Var "x") (Var "y"))))