]>
Commit | Line | Data |
---|---|---|
c194f84c | 1 | module PursLoader.LoaderRef |
2 | ( LoaderRef() | |
3 | , Loader() | |
4 | , async | |
5 | , cacheable | |
c194f84c | 6 | , query |
7 | ) where | |
8 | ||
9 | import Control.Monad.Eff (Eff()) | |
10 | import Control.Monad.Eff.Exception (Error()) | |
11 | ||
c194f84c | 12 | import Data.Function (Fn3(), runFn3) |
13 | import Data.Maybe (Maybe(), fromMaybe, isJust) | |
14 | ||
15 | data LoaderRef | |
16 | ||
17 | foreign import data Loader :: ! | |
18 | ||
19 | foreign import asyncFn """ | |
20 | function asyncFn(isJust, fromMaybe, ref){ | |
21 | return function(){ | |
22 | var callback = ref.async(); | |
23 | return function(error){ | |
24 | return function(value){ | |
25 | return function(){ | |
26 | return isJust(error) ? callback(fromMaybe(new Error())(error)) | |
27 | : callback(null, value); | |
28 | }; | |
29 | }; | |
30 | }; | |
31 | }; | |
32 | }""" :: forall eff a. Fn3 (Maybe Error -> Boolean) | |
33 | (Error -> Maybe Error -> Error) | |
34 | LoaderRef | |
35 | (Eff (loader :: Loader | eff) (Maybe Error -> a -> Eff (loader :: Loader | eff) Unit)) | |
36 | ||
37 | async :: forall eff a. LoaderRef -> Eff (loader :: Loader | eff) (Maybe Error -> a -> Eff (loader :: Loader | eff) Unit) | |
38 | async ref = runFn3 asyncFn isJust fromMaybe ref | |
39 | ||
40 | foreign import cacheable """ | |
41 | function cacheable(ref){ | |
42 | return function(){ | |
43 | return ref.cacheable && ref.cacheable(); | |
44 | }; | |
45 | }""" :: forall eff. LoaderRef -> Eff (loader :: Loader | eff) Unit | |
46 | ||
c194f84c | 47 | foreign import query """ |
48 | function query(ref){ | |
49 | return ref.query; | |
50 | }""" :: LoaderRef -> String |