diff --git a/Makefile b/Makefile index 9c0be2f..d5c908c 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,9 @@ test : ./language ./sample-programs/basic-3 ./language ./sample-programs/basic-4 ./language ./sample-programs/basic-5 + ./language ./sample-programs/basic-6 + ./language ./sample-programs/basic-7 + ./language ./sample-programs/basic-8 run : cabal -v0 new-run language -- "test_program" diff --git a/sample-programs/basic-5 b/sample-programs/basic-5 index 9a9a723..319b9b0 100644 --- a/sample-programs/basic-5 +++ b/sample-programs/basic-5 @@ -1,8 +1,8 @@ --- double : _Int -> _Int ; --- double n = n + n; +double : _Int -> _Int ; +double n = n + n; id : 'a -> 'a ; id x = x ; -main : ('a -> 'b -> 'c) ; -main = id ; +main : _Int ; +main = id double 5; diff --git a/sample-programs/basic-6 b/sample-programs/basic-6 new file mode 100644 index 0000000..467d263 --- /dev/null +++ b/sample-programs/basic-6 @@ -0,0 +1,10 @@ +data Bool () where { + True : Bool () + False : Bool () +}; + +main : Bool () -> _Int ; +main b = case b of { + False => 0; + True => 0 +} diff --git a/sample-programs/basic-7 b/sample-programs/basic-7 new file mode 100644 index 0000000..3ddf98b --- /dev/null +++ b/sample-programs/basic-7 @@ -0,0 +1,10 @@ +data Bool () where { + True : Bool () + False : Bool () +}; + +ifThenElse : Bool () -> 'a -> 'a -> 'a; +ifThenElse b if else = case b of { + True => if; + False => else + } diff --git a/sample-programs/basic-8 b/sample-programs/basic-8 new file mode 100644 index 0000000..d916d03 --- /dev/null +++ b/sample-programs/basic-8 @@ -0,0 +1,24 @@ +data Maybe ('a) where { + Nothing : Maybe ('a) + Just : 'a -> Maybe ('a) +}; + +fromJust : Maybe ('a) -> 'a ; +fromJust a = + case a of { + Just a => a + }; + +fromMaybe : 'a -> Maybe ('a) -> 'a ; +fromMaybe a b = + case b of { + Just a => a; + Nothing => a + }; + +maybe : 'b -> ('a -> 'b) -> Maybe ('a) -> 'b; +maybe b f ma = + case ma of { + Just a => f a; + Nothing => b + } diff --git a/test_program b/test_program index bc463fe..d916d03 100644 --- a/test_program +++ b/test_program @@ -1,23 +1,24 @@ --- data Bool () where { --- True : Bool () --- False : Bool () --- }; - data Maybe ('a) where { Nothing : Maybe ('a) Just : 'a -> Maybe ('a) }; --- main : Bool () -> Maybe (Bool ()) ; --- main x = --- case x of { --- True => Nothing; --- False => Just True --- }; - -fun : Maybe ('a) -> 'a ; -fun a = +fromJust : Maybe ('a) -> 'a ; +fromJust a = case a of { - Just c => c + Just a => a }; +fromMaybe : 'a -> Maybe ('a) -> 'a ; +fromMaybe a b = + case b of { + Just a => a; + Nothing => a + }; + +maybe : 'b -> ('a -> 'b) -> Maybe ('a) -> 'b; +maybe b f ma = + case ma of { + Just a => f a; + Nothing => b + }