on master help sign in
SPECIALIZE monad, alternative and each for IO
commitb7d651f24d2847f805d0dc1e50a57bd6f7a47199 authorHarendra Kumar <harendra.kumar@gmail.com> dateWed 19 Jul 2017, 10:47 (9 years ago) parent9ec9c52
1 file changed+3
src/Asyncly/AsyncT.hs+3
src/Asyncly/AsyncT.hs+3
@@ -201,6 +201,7 @@ type MonadAsync m = (MonadIO m, MonadBaseControl IO m, MonadThrow m)
201201------------------------------------------------------------------------------
202202
203203instance MonadAsync m => Monad (AsyncT m) where
204+ {-# SPECIALIZE instance Monad (AsyncT IO) #-}
204205 return a = AsyncT . return $ Just a
205206 m >>= f = bind
206207
@@ -544,6 +545,7 @@ makeAsync cbsetter = AsyncT $ do
544545------------------------------------------------------------------------------
545546
546547instance MonadAsync m => Alternative (AsyncT m) where
548+ {-# SPECIALIZE instance Alternative (AsyncT IO) #-}
547549 empty = AsyncT $ return Nothing
548550 (<|>) m1 m2 = AsyncT $ do
549551 r <- runAsyncTask False m1
@@ -561,6 +563,7 @@ instance (Monoid a, MonadAsync m) => Monoid (AsyncT m a) where
561563 mempty = return mempty
562564
563565-- scatter
566+{-# SPECIALIZE each :: [a] -> AsyncT IO a #-}
564567each :: (MonadIO m, MonadBaseControl IO m, MonadThrow m)
565568 => [a] -> AsyncT m a
566569each xs = foldr (<|>) empty $ map return xs