7 | data Future : Type -> Type where [external]
9 | %foreign "scheme:blodwen-make-future"
10 | prim__makeFuture : {0 a : Type} -> (() -> a) -> Future a
12 | %foreign "scheme:blodwen-await-future"
13 | prim__awaitFuture : {0 a : Type} -> Future a -> a
16 | fork : Lazy a -> Future a
17 | fork l = prim__makeFuture $
\_ => force l
20 | await : Future a -> a
21 | await f = prim__awaitFuture f
24 | Functor Future where
25 | map func future = fork $
func (await future)
28 | Applicative Future where
30 | funcF <*> v = fork $
(await funcF) (await v)
35 | v >>= func = join . fork $
func (await v)
38 | performFutureIO : HasIO io => Future (IO a) -> io (Future a)
39 | performFutureIO = primIO . prim__io_pure . map unsafePerformIO
42 | forkIO : HasIO io => IO a -> io (Future a)
43 | forkIO a = performFutureIO $
fork a