7 | data IORes : Type -> Type where
8 | MkIORes : (result : a) -> (1 x : %World) -> IORes a
12 | PrimIO : Type -> Type
13 | PrimIO a = (1 x : %World) -> IORes a
17 | data IO : Type -> Type where
18 | MkIO : (1 fn : PrimIO a) -> IO a
21 | prim__io_pure : a -> PrimIO a
22 | prim__io_pure = MkIORes
27 | io_pure x = MkIO (MkIORes x)
30 | prim__io_bind : (1 act : PrimIO a) -> (1 k : a -> PrimIO b) -> PrimIO b
31 | prim__io_bind fn k w
32 | = let MkIORes x' w' = fn w in k x' w'
40 | io_bind : (1 act : IO a) -> (1 k : a -> IO b) -> IO b
42 | = MkIO (\w => let MkIORes x' w' = fn w
50 | data Ptr : Type -> Type where [external]
54 | data AnyPtr : Type where [external]
58 | data GCPtr : Type -> Type where [external]
62 | data GCAnyPtr : Type where [external]
65 | data ThreadID : Type where [external]
68 | fromPrim : (1 fn : (1 x : %World) -> IORes a) -> IO a
69 | fromPrim op = MkIO op
72 | toPrim : (1 act : IO a) -> PrimIO a
73 | toPrim (MkIO fn) = fn
75 | %foreign "C:idris2_isNull, libidris2_support, idris_support.h"
76 | "javascript:lambda:x=>x===undefined||x===null?1:0"
78 | prim__nullAnyPtr : AnyPtr -> Int
80 | %foreign "C:idris2_getNull, libidris2_support, idris_support.h"
82 | prim__getNullAnyPtr : AnyPtr
85 | prim__castPtr : AnyPtr -> Ptr t
86 | prim__castPtr = believe_me
89 | prim__forgetPtr : Ptr t -> AnyPtr
90 | prim__forgetPtr = believe_me
93 | prim__nullPtr : Ptr t -> Int
94 | prim__nullPtr p = prim__nullAnyPtr (prim__forgetPtr p)
96 | unsafeCreateWorld : (1 f : (1 x : %World) -> a) -> a
97 | unsafeCreateWorld f = f %MkWorld
99 | unsafeDestroyWorld : (1 x : %World) -> a -> a
100 | unsafeDestroyWorld %MkWorld x = x
103 | unsafePerformIO : IO a -> a
104 | unsafePerformIO (MkIO f)
105 | = unsafeCreateWorld (\w => case f w of
106 | MkIORes res w' => unsafeDestroyWorld w' res)