File tree Expand file tree Collapse file tree 1 file changed +18
-1
lines changed Expand file tree Collapse file tree 1 file changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -2,8 +2,10 @@ module Data.Profunctor.Joker where
2
2
3
3
import Prelude
4
4
5
+ import Data.Either (Either (..))
6
+ import Data.Newtype (class Newtype , un )
5
7
import Data.Profunctor (class Profunctor )
6
- import Data.Newtype (class Newtype )
8
+ import Data.Profunctor.Choice (class Choice )
7
9
8
10
-- | Makes a trivial `Profunctor` for a covariant `Functor`.
9
11
newtype Joker f a b = Joker (f b )
@@ -21,5 +23,20 @@ instance functorJoker :: Functor f => Functor (Joker f a) where
21
23
instance profunctorJoker :: Functor f => Profunctor (Joker f ) where
22
24
dimap f g (Joker a) = Joker (map g a)
23
25
26
+ instance clownJoker :: Functor f => Choice (Joker f ) where
27
+ left (Joker f) = Joker $ map Left f
28
+ right (Joker f) = Joker $ map Right f
29
+
30
+ instance applyJoker :: Apply f => Apply (Joker f a ) where
31
+ apply (Joker f) (Joker g) = Joker $ apply f g
32
+
33
+ instance applicativeJoker :: Applicative f => Applicative (Joker f a ) where
34
+ pure = Joker <<< pure
35
+
36
+ instance bindJoker :: Bind f => Bind (Joker f a ) where
37
+ bind (Joker ma) amb = Joker $ ma >>= (amb >>> un Joker )
38
+
39
+ instance monadJoker :: Monad m => Monad (Joker m a )
40
+
24
41
hoistJoker :: forall f g a b . (f ~> g ) -> Joker f a b -> Joker g a b
25
42
hoistJoker f (Joker a) = Joker (f a)
You can’t perform that action at this time.
0 commit comments