0 | module IO.Async.Resource
2 | import Data.List.Quantifiers.Extra
3 | import IO.Async.Fiber
8 | interface Resource a where
9 | release : HasIO io => a -> io ()
13 | {auto rs : All Resource ts}
14 | -> All (Async es) ts
15 | -> (HList ts -> Async es a)
18 | useMany @{_ :: _} (v :: vs) f =
19 | bracket v (\rv => useMany vs $
f . (rv::)) release
22 | use1 : Resource v => Async es v -> (v -> Async es a) -> Async es a
23 | use1 x f = bracket x f release