]> git.immae.eu Git - github/fretlink/purs-loader.git/blame - src/LoaderRef.purs
Bumping version number to 0.3.0
[github/fretlink/purs-loader.git] / src / LoaderRef.purs
CommitLineData
c194f84c 1module PursLoader.LoaderRef
2 ( LoaderRef()
3 , Loader()
4 , async
5 , cacheable
c194f84c 6 , query
7 ) where
8
9import Control.Monad.Eff (Eff())
10import Control.Monad.Eff.Exception (Error())
11
c194f84c 12import Data.Function (Fn3(), runFn3)
13import Data.Maybe (Maybe(), fromMaybe, isJust)
14
15data LoaderRef
16
17foreign import data Loader :: !
18
19foreign import asyncFn """
20function 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
37async :: forall eff a. LoaderRef -> Eff (loader :: Loader | eff) (Maybe Error -> a -> Eff (loader :: Loader | eff) Unit)
38async ref = runFn3 asyncFn isJust fromMaybe ref
39
40foreign import cacheable """
41function cacheable(ref){
42 return function(){
43 return ref.cacheable && ref.cacheable();
44 };
45}""" :: forall eff. LoaderRef -> Eff (loader :: Loader | eff) Unit
46
c194f84c 47foreign import query """
48function query(ref){
49 return ref.query;
50}""" :: LoaderRef -> String