Agda-2.2.10: src/data/EpicInclude/AgdaPrelude.e
%include "string.h"
-- IO
%inline putStr (x:String) -> Unit =
foreign Unit "putStr" (x:String)
putStrLn (x:String) -> Unit =
putStr(append(x,"\n"))
readStr () -> String =
foreign String "readStr" ()
intToStr (x:Int) -> String =
foreign String "intToStr" (x:Int)
strToInt (x:String) -> Int =
foreign String "strToInt" (x:String)
printInt (x:Int) -> Unit =
foreign Unit "printInt" (x:Int)
ioreturn (a : Any, u : Unit) -> Any = a
iobind (x : Any, f : Any, u : Unit) -> Any = f (x (u), u)
-- String operations
append (x:String, y:String) -> String =
foreign String "append" (x:String, y:String)
length (x:String) -> String =
foreign Int "strlen" (x:String)
index (x:String, i:Int) -> Char =
foreign Int "strIndex" (x:String, i:Int)
-- Big number arithmetic
subBig (x:BigInt, y:BigInt) -> BigInt =
foreign BigInt "subBigInt" (x:BigInt, y:BigInt)
gtBig (x:BigInt, y:BigInt) -> Bool =
foreign Int "gtBigInt" (x:BigInt, y:BigInt)
leBig (x:BigInt, y:BigInt) -> Bool =
foreign Int "leBigInt" (x:BigInt, y:BigInt)
geBig (x:BigInt, y:BigInt) -> Bool =
foreign Int "geBigInt" (x:BigInt, y:BigInt)
printBig (x:BigInt) -> Unit =
foreign Unit "printBigInt" (x:BigInt)
bigIntToStr (x:BigInt) -> String =
foreign String "bigIntToStr" (x:BigInt)
strToBigInt (x:String) -> Int =
foreign String "strToBigInt" (x:String)
-- Unit
%inline primUnit() -> Unit = unit
-- Nats
primNatPlus (x:BigInt, y:BigInt) -> BigInt =
foreign BigInt "addBigInt" (x:BigInt, y:BigInt)
primNatTimes (x:BigInt, y:BigInt) -> BigInt =
foreign BigInt "mulBigInt" (x:BigInt, y:BigInt)
primZero() -> BigInt = 0L
primSuc (n : BigInt) -> BigInt = primNatPlus(n, 1L)
primPred(n : BigInt) -> BigInt = subBig(n, 1L)
%inline absBig (x : BigInt) -> BigInt =
if primNatLess(x, primZero)
then primZero
else x
%inline primNatMinus(x : BigInt, y : BigInt) -> BigInt = absBig(subBig(x, y))
-- readInt () -> Int = foreign Int "readInt" ()
primNatEquality (x:BigInt, y:BigInt) -> Bool =
foreign Int "eqBigInt" (x:BigInt, y:BigInt)
primNatLess (x:BigInt, y:BigInt) -> Bool =
foreign Int "ltBigInt" (x:BigInt, y:BigInt)
-- Strings
-- Cannot call foreign "append" directly, for some reason
%inline primStringAppend (x : String, y : String) -> String = append(x, y)
primStringEquality (x : String, y : String) -> Bool =
foreign Int "eqString" (x : String, y : String)
-- Bools
%inline primTrue () -> Bool = true
%inline primFalse () -> Bool = false
-- Chars
printChar (x:Int) -> Unit =
foreign Unit "printCharRep" (x:Int)
init () -> Unit =
foreign Unit "init" ()
-- Coinduction
primSharp (u1 : Any, u2 : Any, x : Any) -> Data = Con 0 (x)