on master help sign in
SPECIALIZE monad, alternative and each for IO
b7d651fHarendra Kumar
src/Asyncly/AsyncT.hs+3
@@ -201,6 +201,7 @@ type MonadAsync m = (MonadIO m, MonadBaseControl IO m, MonadThrow m)
201------------------------------------------------------------------------------
201------------------------------------------------------------------------------
202
202
203instance MonadAsync m => Monad (AsyncT m) where
203instance MonadAsync m => Monad (AsyncT m) where
204+ {-# SPECIALIZE instance Monad (AsyncT IO) #-}
204 return a = AsyncT . return $ Just a
205 return a = AsyncT . return $ Just a
205 m >>= f = bind
206 m >>= f = bind
206
207
@@ -544,6 +545,7 @@ makeAsync cbsetter = AsyncT $ do
544------------------------------------------------------------------------------
545------------------------------------------------------------------------------
545
546
546instance MonadAsync m => Alternative (AsyncT m) where
547instance MonadAsync m => Alternative (AsyncT m) where
548+ {-# SPECIALIZE instance Alternative (AsyncT IO) #-}
547 empty = AsyncT $ return Nothing
549 empty = AsyncT $ return Nothing
548 (<|>) m1 m2 = AsyncT $ do
550 (<|>) m1 m2 = AsyncT $ do
549 r <- runAsyncTask False m1
551 r <- runAsyncTask False m1
@@ -561,6 +563,7 @@ instance (Monoid a, MonadAsync m) => Monoid (AsyncT m a) where
561 mempty = return mempty
563 mempty = return mempty
562
564
563-- scatter
565-- scatter
566+{-# SPECIALIZE each :: [a] -> AsyncT IO a #-}
564each :: (MonadIO m, MonadBaseControl IO m, MonadThrow m)
567each :: (MonadIO m, MonadBaseControl IO m, MonadThrow m)
565 => [a] -> AsyncT m a
568 => [a] -> AsyncT m a
566each xs = foldr (<|>) empty $ map return xs
569each xs = foldr (<|>) empty $ map return xs