1
module Prelude.IO where
3
open import Prelude.Bool
4
open import Prelude.Char
5
open import Prelude.Nat
6
open import Prelude.String
7
open import Prelude.Unit
8
open import Prelude.Vec
9
open import Prelude.Float
14
{-# COMPILED_TYPE IO IO #-}
19
return : ∀ {A} → A → IO A
20
_>>=_ : ∀ {A B} → IO A → (A → IO B) → IO B
22
getArg : Nat -> String
24
args : Vec String numArgs
25
args = buildArgs numArgs
27
buildArgs : (n : Nat) -> Vec String n
29
buildArgs (S n) = snoc (buildArgs n) (getArg n)
31
{-# COMPILED_EPIC return (u1 : Unit, a : Any) -> Any = ioreturn(a) #-}
32
{-# COMPILED_EPIC _>>=_ (u1 : Unit, u2 : Unit, x : Any, f : Any) -> Any = iobind(x,f) #-}
33
{-# COMPILED_EPIC numArgs () -> BigInt = foreign BigInt "numArgsBig" () #-}
34
{-# COMPILED_EPIC getArg (n : BigInt) -> Any = foreign Any "getArgBig" (n : BigInt) #-}
37
natToString : Nat -> String
40
putStr : String -> IO Unit
41
printChar : Char -> IO Unit
44
putStrLn : String -> IO Unit
45
putStrLn s = putStr s >>= \_ -> putStr "\n"
47
printFloat : Float -> IO Unit
48
printFloat f = putStr (floatToString f)
50
printNat : Nat -> IO Unit
51
printNat n = putStr (natToString n)
53
printBool : Bool -> IO Unit
54
printBool true = putStr "true"
55
printBool false = putStr "false"
57
{-# COMPILED_EPIC natToString (n : Any) -> String = bigToStr(n) #-}
58
{-# COMPILED_EPIC readNat (u : Unit) -> Any = strToBig(readStr(u)) #-}
60
{-# COMPILED_EPIC putStr (a : String, u : Unit) -> Unit = foreign Int "wputStr" (a : String); primUnit #-}
61
{-# COMPILED_EPIC readStr (u : Unit) -> Data = readStr(u) #-}
62
{-# COMPILED_EPIC printChar (c : Int, u : Unit) -> Unit = printChar(c) #-}
65
_<$>_ : {A B : Set}(f : A -> B)(m : IO A) -> IO B
66
f <$> x = x >>= λ y -> return (f y)
69
bind : ∀ {A B} → IO A → (A → IO B) → IO B
73
then : ∀ {A B} -> IO A -> IO B -> IO B
74
then m f = m >>= λ _ -> f
76
syntax bind e (\ x -> f) = x <- e , f
77
syntax then e f = e ,, f
b'\\ No newline at end of file'