mirror of
https://github.com/anoma/juvix.git
synced 2024-12-14 08:27:03 +03:00
803d2008d9
* remove ≔ from the language and replace it by := * revert accidental changes in juvix input mode * update stdlib submodule * rename ℕ by Nat in the tests and examples * fix shell tests
53 lines
754 B
Plaintext
53 lines
754 B
Plaintext
module HelloWorld;
|
||
|
||
inductive ℕ {
|
||
zero : ℕ;
|
||
suc : ℕ → ℕ;
|
||
};
|
||
|
||
inductive V {
|
||
zeroV : V;
|
||
sucV : V;
|
||
};
|
||
|
||
|
||
infixl 6 +;
|
||
+ : ℕ → ℕ → ℕ;
|
||
+ zero b := b;
|
||
+ (suc a) b := suc (a + b);
|
||
|
||
infixl 7 *;
|
||
* : ℕ → ℕ → ℕ;
|
||
* zero b := zero;
|
||
* (suc a) b := b + (a * b);
|
||
|
||
axiom Action : Type;
|
||
compile Action {
|
||
ghc ↦ "IO ()";
|
||
};
|
||
|
||
infixl 1 >>;
|
||
axiom >> : Action → Action → Action;
|
||
compile >> {
|
||
ghc ↦ "(>>)";
|
||
};
|
||
|
||
axiom String : Type;
|
||
|
||
axiom putStr : String → Action;
|
||
compile putStr {
|
||
ghc ↦ "putStrLn";
|
||
};
|
||
|
||
doTimes : ℕ → Action → Action;
|
||
doTimes zero _ := putStr "done";
|
||
doTimes (suc n) a := a >> doTimes n a;
|
||
|
||
three : ℕ;
|
||
three := suc (suc (suc zero));
|
||
|
||
main : Action;
|
||
main := doTimes three (putStr "hello world");
|
||
|
||
end;
|