ChannelT 0.0.0.4 → 0.0.0.5
raw patch · 3 files changed
+61/−29 lines, 3 filesdep ~free
Dependency ranges changed: free
Files
- ChannelT.cabal +3/−3
- src/Control/Monad/Channel.hs +8/−6
- src/Control/Monad/Channel/Internal.hs +50/−20
ChannelT.cabal view
@@ -1,5 +1,5 @@ name: ChannelT-version: 0.0.0.4+version: 0.0.0.5 synopsis: Generalized stream processors description: A mutual generalization of <https://hackage.haskell.org/package/pipes pipes> and <https://hackage.haskell.org/package/machines machines>; a library for exploring a particular corner of the design space of streaming IO (and other related tasks) in Haskell. license: BSD3@@ -7,7 +7,7 @@ author: Alexander Altman maintainer: alexanderaltman@me.com homepage: https://github.com/pthariensflame/ChannelT-copyright: Copyright (c) 2015-2017, Alexander Altman+copyright: Copyright (c) 2015-2018, Alexander Altman category: Control, Enumerator, Iteratee, Pipes, Proxies build-type: Simple cabal-version: >= 1.24@@ -24,6 +24,6 @@ -- other-modules: build-depends: base >= 4.8.2.0 && < 5 , mtl >= 2.2.1 && < 2.3- , free >= 4.12.4 && < 4.13+ , free >= 4.12.4 && < 6 , transformers-base >= 0.4.4 && < 0.5 , mmorph >= 1.0.5 && < 1.2
src/Control/Monad/Channel.hs view
@@ -1,7 +1,9 @@ {-# LANGUAGE Trustworthy #-}-module Control.Monad.Channel (- Channel,- ChannelT,- MonadChannel(..),-) where-import Control.Monad.Channel.Internal++module Control.Monad.Channel+ ( Channel+ , ChannelT+ , MonadChannel(..)+ ) where++import Control.Monad.Channel.Internal
src/Control/Monad/Channel/Internal.hs view
@@ -1,38 +1,68 @@-{-# LANGUAGE FunctionalDependencies, PolyKinds, FlexibleContexts #-}-{-# LANGUAGE ExistentialQuantification, FlexibleInstances, UndecidableInstances #-}-{-# LANGUAGE StandaloneDeriving, GeneralizedNewtypeDeriving #-}-{-# LANGUAGE AutoDeriveTypeable, DeriveFunctor, DeriveGeneric #-}-module Control.Monad.Channel.Internal (ChannelT(..), Channel, MonadChannel(..), ChannelF(..)) where-import Control.Monad.Trans-import Control.Monad.Identity-import Control.Monad.Base-import Control.Monad.Morph-import Control.Monad.Trans.Free-import GHC.Generics+{-# LANGUAGE AutoDeriveTypeable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE UndecidableInstances #-} +module Control.Monad.Channel.Internal+ ( ChannelT(..)+ , Channel+ , MonadChannel(..)+ , ChannelF(..)+ ) where++import Control.Monad.Base+import Control.Monad.Identity+import Control.Monad.Morph+import Control.Monad.Trans+import Control.Monad.Trans.Free+import GHC.Generics+ instance (MonadBase b m, Functor f) => MonadBase b (FreeT f m) where liftBase = liftBaseDefault+ instance Functor f => MFunctor (FreeT f) where hoist = hoistFreeT+ deriving instance Generic (FreeT f m a) -newtype ChannelT sel m a = ChannelT { unChannelT :: FreeT (ChannelF sel) m a }- deriving (Functor, Applicative, Monad, MonadTrans, MonadFree (ChannelF sel), Generic1, Generic)+newtype ChannelT sel m a = ChannelT+ { unChannelT :: FreeT (ChannelF sel) m a+ } deriving ( Functor+ , Applicative+ , Monad+ , MonadTrans+ , MonadFree (ChannelF sel)+ , Generic1+ , Generic+ )+ deriving instance MonadBase b m => MonadBase b (ChannelT sel m) -data ChannelF (sel :: * -> * -> *) (x :: *) =- forall (i :: *) (o :: *). SyncChannel {- selectorF :: sel i o,- outputF :: o,- inputF :: i -> x+data ChannelF (sel :: * -> * -> *) (x :: *) = forall (o :: *) (i :: *). SyncChannel+ { selectorF :: sel i o+ , outputF :: o+ , inputF :: i -> x }+ deriving instance Functor (ChannelF sel) -class Monad m => MonadChannel (sel :: * -> * -> *) (m :: * -> *) | m -> sel where+class Monad m =>+ MonadChannel (sel :: * -> * -> *) (m :: * -> *)+ | m -> sel+ where syncOn :: sel i o -> o -> m i instance Monad m => MonadChannel sel (ChannelT sel m) where- syncOn s o = ChannelT . FreeT . return . Free . SyncChannel s o $ FreeT . return . Pure+ syncOn s o =+ ChannelT . FreeT . return . Free . SyncChannel s o $ FreeT . return . Pure -- NB: Don't use GeneralizedNewtypeDeriving to create this instance, as it will -- trigger GHC Trac #11837 on GHC 8.0.1 and older.