mirror of
https://github.com/anoma/juvix.git
synced 2024-12-15 01:52:11 +03:00
90 lines
1.8 KiB
Plaintext
90 lines
1.8 KiB
Plaintext
module Input;
|
||
|
||
--------------------------------------------------------------------------------
|
||
-- Booleans
|
||
--------------------------------------------------------------------------------
|
||
|
||
inductive Bool {
|
||
true : Bool;
|
||
false : Bool;
|
||
};
|
||
|
||
--------------------------------------------------------------------------------
|
||
-- Strings
|
||
--------------------------------------------------------------------------------
|
||
|
||
axiom String : Type;
|
||
|
||
compile String {
|
||
ghc ↦ "[Char]";
|
||
c ↦ "char*";
|
||
};
|
||
|
||
--------------------------------------------------------------------------------
|
||
-- IO
|
||
--------------------------------------------------------------------------------
|
||
|
||
axiom Action : Type;
|
||
|
||
compile Action {
|
||
ghc ↦ "IO ()";
|
||
c ↦ "int";
|
||
};
|
||
|
||
foreign c {
|
||
int sequence(int a, int b) {
|
||
return a + b;
|
||
\}
|
||
};
|
||
|
||
infixl 1 >>;
|
||
axiom >> : Action → Action → Action;
|
||
|
||
compile >> {
|
||
ghc ↦ "(>>)";
|
||
c ↦ "sequence";
|
||
};
|
||
|
||
axiom put-str : String → Action;
|
||
|
||
compile put-str {
|
||
ghc ↦ "putStr";
|
||
c ↦ "putStr";
|
||
};
|
||
|
||
axiom put-str-ln : String → Action;
|
||
|
||
compile put-str-ln {
|
||
ghc ↦ "putStrLn";
|
||
c ↦ "putStrLn";
|
||
};
|
||
|
||
bool-to-str : Bool → String;
|
||
bool-to-str true ≔ "True";
|
||
bool-to-str false ≔ "False";
|
||
|
||
infixr 2 ×;
|
||
infixr 4 ,;
|
||
inductive × (A : Type) (B : Type) {
|
||
, : A → B → A × B;
|
||
};
|
||
|
||
fst : {A : Type} → {B : Type} → A × B → A;
|
||
fst (a , b) ≔ a;
|
||
|
||
id' : {A : Type} → A → A;
|
||
id' a ≔ fst (a , a);
|
||
|
||
--------------------------------------------------------------------------------
|
||
-- Main
|
||
--------------------------------------------------------------------------------
|
||
|
||
fst-of-pair : Action;
|
||
fst-of-pair ≔ (put-str "fst (True, False) = ")
|
||
>> put-str-ln (bool-to-str (fst (true , false)));
|
||
|
||
main : Action;
|
||
main ≔ fst-of-pair >> put-str-ln (bool-to-str (id' false));
|
||
|
||
end;
|