4 | import Prelude.Basics
5 | import Prelude.Interfaces
16 | map f io = io_bind io $
io_pure . f
20 | Applicative IO where
30 | b >>= k = io_bind b k
33 | interface Monad io => HasIO io where
35 | liftIO : IO a -> io a
38 | interface Monad io => HasLinearIO io where
39 | constructor MkHasLinearIO
40 | liftIO1 : (1 _ : IO a) -> io a
42 | public export %inline
43 | HasLinearIO IO where
46 | public export %inline
47 | HasLinearIO io => HasIO io where
48 | liftIO x = liftIO1 x
51 | primIO : HasIO io => (fn : (1 x : %World) -> IORes a) -> io a
52 | primIO op = liftIO (fromPrim op)
55 | primIO1 : HasLinearIO io => (1 fn : (1 x : %World) -> IORes a) -> io a
56 | primIO1 op = liftIO1 (fromPrim op)
59 | prim__onCollectAny : AnyPtr -> (AnyPtr -> PrimIO ()) -> PrimIO GCAnyPtr
61 | prim__onCollect : Ptr t -> (Ptr t -> PrimIO ()) -> PrimIO (GCPtr t)
64 | onCollectAny : HasIO io => AnyPtr -> (AnyPtr -> IO ()) -> io GCAnyPtr
65 | onCollectAny ptr c = primIO (prim__onCollectAny ptr (\x => toPrim (c x)))
68 | onCollect : HasIO io => Ptr t -> (Ptr t -> IO ()) -> io (GCPtr t)
69 | onCollect ptr c = primIO (prim__onCollect ptr (\x => toPrim (c x)))
71 | %foreign "C:idris2_getString, libidris2_support, idris_support.h"
72 | "javascript:lambda:x=>x"
74 | prim__getString : Ptr String -> String
76 | %foreign "C:putchar,libc 6"
77 | "node:lambda:x=>process.stdout.write(x)"
78 | "browser:lambda:x=>console.log(x)"
79 | prim__putChar : Char -> (1 x : %World) -> IORes ()
81 | %foreign "C:getchar,libc 6"
82 | "node:support:getChar,support_system_file"
83 | %extern prim__getChar : (1 x : %World) -> IORes Char
85 | %foreign "C:idris2_getStr, libidris2_support, idris_support.h"
86 | "node:support:getStr,support_system_file"
87 | prim__getStr : PrimIO String
89 | %foreign "C:idris2_putStr, libidris2_support, idris_support.h"
90 | "node:lambda:x=>process.stdout.write(x)"
91 | "browser:lambda:x=>console.log(x)"
92 | prim__putStr : String -> PrimIO ()
96 | putStr : HasIO io => String -> io ()
97 | putStr str = primIO (prim__putStr str)
101 | %inline putStrLn : HasIO io => String -> io ()
102 | putStrLn str = putStr (prim__strAppend str "\n")
106 | getLine : HasIO io => io String
107 | getLine = primIO prim__getStr
111 | putChar : HasIO io => Char -> io ()
112 | putChar c = primIO (prim__putChar c)
116 | putCharLn : HasIO io => Char -> io ()
117 | putCharLn c = putStrLn (prim__cast_CharString c)
121 | getChar : HasIO io => io Char
122 | getChar = primIO prim__getChar
124 | %foreign "scheme:blodwen-thread"
127 | prim__fork : (1 prog : PrimIO ()) -> PrimIO ThreadID
130 | fork : (1 prog : IO ()) -> IO ThreadID
131 | fork act = fromPrim (prim__fork (toPrim act))
133 | %foreign "scheme:blodwen-thread-wait"
135 | prim__threadWait : (1 threadID : ThreadID) -> PrimIO ()
138 | threadWait : (1 threadID : ThreadID) -> IO ()
139 | threadWait threadID = fromPrim (prim__threadWait threadID)
143 | print : HasIO io => Show a => a -> io ()
144 | print = putStr . show
148 | printLn : HasIO io => Show a => a -> io ()
149 | printLn = putStrLn . show