packages feed

linear-free 0.2.0.0 → 0.3.0.0

raw patch · 4 files changed

+11/−90 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Control.Linear.Monad.Free.Church: [F] :: forall a (f :: Type -> Type). (forall r. () => (a %1 -> r) %1 -> (f r %1 -> r) -> r) -> F f a
- Control.Linear.Monad.Free.Church: foldF :: Monad m => (forall x. () => f x %1 -> m x) -> F f a %1 -> m a
- Control.Linear.Monad.Free.Church: fromF :: forall m (f :: Type -> Type) a. MonadFree f m => F f a %1 -> m a
- Control.Linear.Monad.Free.Church: hoistF :: (forall x. () => f x %1 -> g x) -> F f a %1 -> F g a
- Control.Linear.Monad.Free.Church: improve :: forall (f :: Type -> Type) a. Functor f => (forall (m :: Type -> Type). MonadFree f m => m a) %1 -> Free f a
- Control.Linear.Monad.Free.Church: instance (Control.Functor.Linear.Internal.Class.Functor f, Data.Functor.Linear.Internal.Traversable.Traversable f) => Data.Functor.Linear.Internal.Traversable.Traversable (Control.Linear.Monad.Free.Church.F f)
- Control.Linear.Monad.Free.Church: instance Control.Functor.Linear.Internal.Class.Functor f => Control.Linear.Monad.Free.MonadFree f (Control.Linear.Monad.Free.Church.F f)
- Control.Linear.Monad.Free.Church: instance Data.Functor.Linear.Internal.Functor.Functor f => Control.Functor.Linear.Internal.Class.Applicative (Control.Linear.Monad.Free.Church.F f)
- Control.Linear.Monad.Free.Church: instance Data.Functor.Linear.Internal.Functor.Functor f => Control.Functor.Linear.Internal.Class.Functor (Control.Linear.Monad.Free.Church.F f)
- Control.Linear.Monad.Free.Church: instance Data.Functor.Linear.Internal.Functor.Functor f => Control.Functor.Linear.Internal.Class.Monad (Control.Linear.Monad.Free.Church.F f)
- Control.Linear.Monad.Free.Church: instance Data.Functor.Linear.Internal.Functor.Functor f => Data.Functor.Linear.Internal.Applicative.Applicative (Control.Linear.Monad.Free.Church.F f)
- Control.Linear.Monad.Free.Church: instance Data.Functor.Linear.Internal.Functor.Functor f => Data.Functor.Linear.Internal.Functor.Functor (Control.Linear.Monad.Free.Church.F f)
- Control.Linear.Monad.Free.Church: iter :: (f a %1 -> a) -> F f a %1 -> a
- Control.Linear.Monad.Free.Church: iterM :: Applicative m => (f (m a) %1 -> m a) -> F f a %1 -> m a
- Control.Linear.Monad.Free.Church: liftF :: (Functor f, MonadFree f m) => f a %1 -> m a
- Control.Linear.Monad.Free.Church: newtype F (f :: Type -> Type) a
- Control.Linear.Monad.Free.Church: retract :: Monad m => F m a %1 -> m a
- Control.Linear.Monad.Free.Church: runF :: F f a %1 -> (a %1 -> r) %1 -> (f r %1 -> r) -> r
- Control.Linear.Monad.Free.Church: toF :: forall (f :: Type -> Type) a. Functor f => Free f a %1 -> F f a
+ Control.Linear.Monad.Free: runFree :: Functor f => (a %1 -> r) -> (f r %1 -> r) -> Free f a %1 -> r

Files

CHANGELOG.md view
@@ -1,5 +1,10 @@ # Revision history for linear-free +## 0.3.0.0++* Removed `Control.Linear.Monad.Free.Church`+* Added `runFree`+ ## 0.2.0.0  * Added `Control.Linear.Monad.Free.Church`
linear-free.cabal view
@@ -1,6 +1,6 @@ cabal-version:      3.0 name:               linear-free-version:            0.2.0.0+version:            0.3.0.0 synopsis:           Linear free monads description:           This package implements free monads on top of `linear-base`. Linear free monads @@ -26,7 +26,6 @@     exposed-modules:       Control.Linear.Applicative.Free       Control.Linear.Monad.Free-      Control.Linear.Monad.Free.Church     build-depends:           base >=4.16 && <5,       linear-base ^>=0.5,
src/Control/Linear/Monad/Free.hs view
@@ -7,6 +7,7 @@   foldFree,   unfold,   liftF,+  runFree, ) where  import qualified Control.Functor.Linear as Control@@ -57,6 +58,10 @@ instance Data.Traversable f => Data.Traversable (Free f) where   traverse f (Pure x) = Pure Data.<$> f x   traverse f (Free m) = Free Data.<$> Data.traverse (Data.traverse f) m++runFree :: Data.Functor f => (a %1 -> r) -> (f r %1 -> r) -> Free f a %1 -> r+runFree p _ (Pure x) = p x+runFree p b (Free m) = b $ runFree p b Data.<$> m  retract :: Control.Monad f => Free f a %1 -> f a retract (Pure x) = Control.pure x
− src/Control/Linear/Monad/Free/Church.hs
@@ -1,88 +0,0 @@-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-}--module Control.Linear.Monad.Free.Church (-  F (..),-  runF,-  improve,-  fromF,-  iter,-  iterM,-  toF,-  retract,-  hoistF,-  foldF,-  liftF,-) where--import qualified Control.Functor.Linear as Control-import Control.Linear.Monad.Free (Free (..), MonadFree (..))-import qualified Data.Functor.Linear as Data-import GHC.Num.Integer ()-import Prelude.Linear-import qualified Prelude.Linear as L--newtype F f a where-  F :: (forall r. (a %1 -> r) %1 -> (f r %1 -> r) -> r) %1 -> F f a--runF :: F f a %1 -> (a %1 -> r) %1 -> (f r %1 -> r) -> r-runF (F m) p b = m p b--instance Data.Functor f => Data.Functor (F f) where-  fmap f (F m) = F (\p b -> m (p . f) b)--instance Data.Functor f => Control.Functor (F f) where-  fmap f (F m) = F (\p b -> m (p . f) b)--instance Data.Functor f => Data.Applicative (F f) where-  {-# INLINE pure #-}-  pure x = F (\p _ -> p x)--  F f <*> F g = F (\p b -> f (\a -> g (p L.. a) b) b)--instance Data.Functor f => Control.Applicative (F f) where-  {-# INLINE pure #-}-  pure x = F (\p _ -> p x)--  F f <*> F g = F (\p b -> f (\a -> g (p L.. a) b) b)--instance Data.Functor f => Control.Monad (F f) where-  F m >>= f = F (\p b -> m (\x -> runF (f x) p b) b)--instance Control.Functor f => MonadFree f (F f) where-  wrap f = F (\p b -> b (Control.fmap (\(F m) -> m p b) f))--instance (Control.Functor f, Data.Traversable f) => Data.Traversable (F f) where-  traverse f m = runF m (Data.fmap Control.return . f) (Data.fmap wrap . Data.sequenceA)--improve ::-  forall f a.-  Control.Functor f =>-  (forall m. MonadFree f m => m a) %1 ->-  Free f a-improve f = fromF @_ @f f--fromF :: forall m f a. MonadFree f m => F f a %1 -> m a-fromF (F m) = m Control.return wrap--iter :: (f a %1 -> a) -> F f a %1 -> a-iter f (F m) = m id f--iterM :: Control.Applicative m => (f (m a) %1 -> m a) -> F f a %1 -> m a-iterM f (F m) = m Control.pure f--toF :: Control.Functor f => Free f a %1 -> F f a-toF (Pure x) = F (\p _ -> p x)-toF (Free f) = wrap (toF Control.<$> f)--retract :: Control.Monad m => F m a %1 -> m a-retract (F m) = m Control.pure Control.join--hoistF :: (forall x. f x %1 -> g x) -> F f a %1 -> F g a-hoistF f (F m) = F (\p b -> m p (\x -> b (f x)))--foldF :: Control.Monad m => (forall x. f x %1 -> m x) -> F f a %1 -> m a-foldF f (F m) = m Control.pure (\x -> Control.join $ f x)--liftF :: (Data.Functor f, MonadFree f m) => f a %1 -> m a-liftF x = wrap (Control.pure Data.<$> x)