2 | import public Control.Monad.MCancel
3 | import public Control.Monad.Resource
4 | import public FS.Pull
10 | bracketWeak : (f es x) -> (x -> f [] ()) -> (x -> Pull f o es r) -> Pull f o es r
11 | bracketWeak acq cleanup g = acquire acq cleanup >>= g
16 | bracket : (f es x) -> (x -> f [] ()) -> (x -> Pull f o es r) -> Pull f o es r
17 | bracket acq cl = newScope . bracketWeak acq cl
24 | finallyWeak : Applicative (f es) => f [] () -> Pull f o es r -> Pull f o es r
25 | finallyWeak cleanup = bracketWeak (pure ()) (const cleanup) . const
30 | finally : Applicative (f es) => f [] () -> Pull f o es r -> Pull f o es r
31 | finally cleanup = bracket (pure ()) (const cleanup) . const
36 | {auto res : Resource f x}
37 | -> (acquire : f es x)
38 | -> (x -> Pull f o es r)
40 | resourceWeak acq = bracketWeak acq cleanup
46 | {auto res : Resource f x}
47 | -> (acquire : f es x)
48 | -> (x -> Pull f o es r)
50 | resource acq = bracket acq cleanup
54 | {auto all : All (Resource f) rs}
55 | -> (acquire : All (f es) rs)
56 | -> (HList rs -> Pull f o es r)
58 | resourcesWeak @{_ :: _} (a::as) g =
59 | resourceWeak a $
\r => resourcesWeak as (\res => g (r::res))
60 | resourcesWeak @{[]} [] g = g []
64 | {auto all : All (Resource f) rs}
65 | -> (acquire : All (f es) rs)
66 | -> (HList rs -> Pull f o es r)
68 | resources acqs = newScope . resourcesWeak acqs