@@ -1,57 +1,57 @@
1−module main;
1+module main
22
33instance Applicative Maybe where {
4− (Just f) <$> (Just a) = Just (f a);
5− Nothing <$> Nothing = Nothing;
4+ (Just f) <$> (Just a) = Just (f a)
5+ Nothing <$> Nothing = Nothing
66
7− pure x = Just x;
7+ pure x = Just x
88}
99
1010data Expr = Var String
1111 | Val Int
12− | Add Expr Expr;
12+ | Add Expr Expr
1313
1414
1515data Eval : Set -> Set where
16− MkEval : (List (String, Int) -> Maybe a) -> Eval a;
16+ MkEval : (List (String, Int) -> Maybe a) -> Eval a
1717
18−fetch : String -> Eval Int;
18+fetch : String -> Eval Int
1919fetch x = MkEval (\e => fetchVal e) where {
20− fetchVal : List (String, Int) -> Maybe Int;
21− fetchVal [] = Nothing;
22− fetchVal ((v, val) :: xs) = if (x == v) then (Just val) else (fetchVal xs);
20+ fetchVal : List (String, Int) -> Maybe Int
21+ fetchVal [] = Nothing
22+ fetchVal ((v, val) :: xs) = if (x == v) then (Just val) else (fetchVal xs)
2323}
2424
2525instance 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))
2727}
2828
2929instance Applicative Eval where {
30− pure x = MkEval (\e => Just x);
30+ pure x = MkEval (\e => Just x)
3131
3232 (<$>) (MkEval f) (MkEval g) = MkEval (\x => appAux (f x) (g x)) where {
33− appAux : Maybe (a -> b) -> Maybe a -> Maybe b;
34− appAux (Just fx) (Just gx) = Just (fx gx);
35− appAux _ _ = Nothing;
33+ appAux : Maybe (a -> b) -> Maybe a -> Maybe b
34+ appAux (Just fx) (Just gx) = Just (fx gx)
35+ appAux _ _ = Nothing
3636 }
3737}
3838
39−eval : Expr -> Eval Int;
40−eval (Var x) = fetch x;
41−eval (Val x) = [| x |];
42−eval (Add x y) = [| eval x + eval y |];
39+eval : Expr -> Eval Int
40+eval (Var x) = fetch x
41+eval (Val x) = [| x |]
42+eval (Add x y) = [| eval x + eval y |]
4343
44−runEval : List (String, Int) -> Expr -> Maybe Int;
44+runEval : List (String, Int) -> Expr -> Maybe Int
4545runEval env e with eval e {
46− | MkEval envFn = envFn env;
46+ | MkEval envFn = envFn env
4747}
4848
49−main : IO ();
50−main = do { print [| (*2) (Just 4) |];
51− print [| plus (Just 4) (Just 5) |];
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"))));
54− };
49+main : IO ()
50+main = do { print [| (*2) (Just 4) |]
51+ print [| plus (Just 4) (Just 5) |]
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"))))
54+ }
5555
5656
5757