diff --git a/bower.json b/bower.json index 7cb31c5..d0dd508 100644 --- a/bower.json +++ b/bower.json @@ -23,6 +23,7 @@ "purescript-maybe": "master", "purescript-newtype": "master", "purescript-prelude": "master", + "purescript-profunctor": "master", "purescript-refs": "master", "purescript-transformers": "master" }, diff --git a/src/Control/Parallel/Class.purs b/src/Control/Parallel/Class.purs index 8b539a5..7338d26 100644 --- a/src/Control/Parallel/Class.purs +++ b/src/Control/Parallel/Class.purs @@ -14,6 +14,8 @@ import Data.Either (Either) import Data.Functor.Compose (Compose(..)) import Data.Maybe (Maybe(..)) import Data.Newtype (class Newtype) +import Data.Profunctor.Costar (Costar(..)) +import Data.Profunctor.Star (Star(..)) import Effect.Class (class MonadEffect, liftEffect) import Effect.Ref as Ref @@ -39,6 +41,15 @@ instance monadParMaybeT :: Parallel f m => Parallel (Compose f Maybe) (MaybeT m) parallel (MaybeT ma) = Compose (parallel ma) sequential (Compose fa) = MaybeT (sequential fa) +instance monadParStar :: Parallel f m => Parallel (Star f a) (Star m a) where + parallel (Star f) = (Star $ parallel <<< f) + sequential (Star f) = (Star $ sequential <<< f) + +instance monadParCostar :: Parallel f m => Parallel (Costar f a) (Costar m a) where + parallel (Costar f) = (Costar $ sequential >>> f) + sequential (Costar f) = (Costar $ parallel >>> f) + + -- | The `ParCont` type constructor provides an `Applicative` instance -- | based on `ContT Unit m`, which waits for multiple continuations to be -- | resumed simultaneously.