potoki-core 1.2 → 1.3
raw patch · 3 files changed
+27/−14 lines, 3 filesdep ~base
Dependency ranges changed: base
Files
- library/Potoki/Core/Consume.hs +25/−13
- library/Potoki/Core/Prelude.hs +1/−0
- potoki-core.cabal +1/−1
library/Potoki/Core/Consume.hs view
@@ -38,19 +38,31 @@ instance Functor (Consume input) where fmap = rmap -instance Applicative (Consume input) where- pure x =- Consume (const (pure x))- (<*>) (Consume leftConsumeIO) (Consume rightConsumeIO) =- Consume $ \ fetch -> do- (leftFetch, rightFetch) <- A.duplicate fetch- rightOutputVar <- newEmptyMVar- forkIO $ do- !rightOutput <- rightConsumeIO rightFetch- putMVar rightOutputVar rightOutput- !leftOutput <- leftConsumeIO leftFetch- rightOutput <- takeMVar rightOutputVar- return (leftOutput rightOutput)+instance Applicative (Consume a) where+ pure x = Consume $ \_ -> pure x++ Consume leftConsumeIO <*> Consume rightConsumeIO =+ Consume $ \fetch -> leftConsumeIO fetch <*> rightConsumeIO fetch++instance Monad (Consume a) where+ Consume leftConsumeIO >>= toRightConsumeIO = Consume $ \fetch -> do+ Consume rightConsumeIO <- toRightConsumeIO <$> leftConsumeIO fetch+ rightConsumeIO fetch++instance MonadIO (Consume a) where+ liftIO a = Consume $ \_ -> a++apConcurrently :: Consume a (b -> c) -> Consume a b -> Consume a c+apConcurrently (Consume leftConsumeIO) (Consume rightConsumeIO) =+ Consume $ \ fetch -> do+ (leftFetch, rightFetch) <- A.duplicate fetch+ rightOutputVar <- newEmptyMVar+ forkIO $ do+ !rightOutput <- rightConsumeIO rightFetch+ putMVar rightOutputVar rightOutput+ !leftOutput <- leftConsumeIO leftFetch+ rightOutput <- takeMVar rightOutputVar+ return (leftOutput rightOutput) {-# INLINABLE list #-} list :: Consume input [input]
library/Potoki/Core/Prelude.hs view
@@ -12,6 +12,7 @@ import Control.Concurrent as Exports import Control.Exception as Exports import Control.Monad as Exports hiding (mapM_, sequence_, forM_, msum, mapM, sequence, forM)+import Control.Monad.IO.Class as Exports import Control.Monad.Fix as Exports hiding (fix) import Control.Monad.ST as Exports import Data.Bits as Exports
potoki-core.cabal view
@@ -1,7 +1,7 @@ name: potoki-core version:- 1.2+ 1.3 synopsis: Low-level components of "potoki" description: