@@ -14,13 +14,15 @@ import Control.Monad.Cont.Trans (ContT(..), runContT)
1414import Control.Monad.Eff (Eff )
1515import Control.Monad.Eff.Class (class MonadEff , liftEff )
1616import Control.Monad.Eff.Ref (REF , writeRef , readRef , newRef )
17- import Control.Monad.Eff.Unsafe (unsafeInterleaveEff )
18- import Control.Monad.Except ( mapExceptT )
19- import Control.Monad.Except .Trans (ExceptT )
17+ import Control.Monad.Eff.Unsafe (unsafeCoerceEff )
18+ import Control.Monad.Except.Trans ( ExceptT (..) )
19+ import Control.Monad.Maybe .Trans (MaybeT (..) )
2020import Control.Monad.Reader.Trans (mapReaderT , ReaderT )
2121import Control.Monad.Writer.Trans (mapWriterT , WriterT )
2222import Control.Plus (class Plus )
23+ import Data.Either (Either )
2324import Data.Foldable (class Foldable , traverse_ )
25+ import Data.Functor.Compose (Compose (..))
2426import Data.Maybe (Maybe (..))
2527import Data.Monoid (class Monoid )
2628import Data.Traversable (class Traversable , traverse )
@@ -118,9 +120,9 @@ instance monadParParallel :: MonadEff eff m => MonadPar (Parallel m) (ContT Unit
118120 parallel = Parallel
119121 sequential (Parallel ma) = ma
120122
121- instance monadParExceptT :: MonadPar f m => MonadPar (ExceptT e f ) (ExceptT e m ) where
122- parallel = mapExceptT parallel
123- sequential = mapExceptT sequential
123+ instance monadParExceptT :: MonadPar f m => MonadPar (Compose f ( Either e ) ) (ExceptT e m ) where
124+ parallel ( ExceptT ma) = Compose ( parallel ma)
125+ sequential ( Compose fa) = ExceptT ( sequential fa)
124126
125127instance monadParReaderT :: MonadPar f m => MonadPar (ReaderT e f ) (ReaderT e m ) where
126128 parallel = mapReaderT parallel
@@ -130,12 +132,9 @@ instance monadParWriterT :: (Monoid w, MonadPar f m) => MonadPar (WriterT w f) (
130132 parallel = mapWriterT parallel
131133 sequential = mapWriterT sequential
132134
133- -- This instance doesn't work yet, since the Applicative instance for MaybeT is
134- -- too restrictive.
135-
136- -- instance monadParMaybeT :: MonadPar f m => MonadPar (MaybeT f) (MaybeT m) where
137- -- parallel = mapMaybeT ?p
138- -- sequential = mapMaybeT ?s
135+ instance monadParMaybeT :: MonadPar f m => MonadPar (Compose f Maybe ) (MaybeT m ) where
136+ parallel (MaybeT ma) = Compose (parallel ma)
137+ sequential (Compose fa) = MaybeT (sequential fa)
139138
140139unsafeWithRef :: forall eff a . Eff (ref :: REF | eff ) a -> Eff eff a
141- unsafeWithRef = unsafeInterleaveEff
140+ unsafeWithRef = unsafeCoerceEff
0 commit comments