monoidal-functors 0.2.0.0 → 0.2.1.0
raw patch · 3 files changed
+157/−14 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Functor.Monoidal: instance (GHC.Base.Alternative f, Data.Semialign.Internal.Semialign f) => Data.Functor.Monoidal.Monoidal (->) Data.These.These Data.Void.Void (,) () f
- Data.Functor.Monoidal: instance Data.Semialign.Internal.Semialign f => Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) f
- Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () f
- Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) f
- Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Unital (->) Data.Void.Void () f
- Data.Functor.Monoidal: instance GHC.Base.Applicative f => Data.Functor.Monoidal.Monoidal (->) (,) () (,) () f
- Data.Functor.Monoidal: instance GHC.Base.Applicative f => Data.Functor.Monoidal.Semigroupal (->) (,) (,) f
- Data.Functor.Monoidal: instance GHC.Base.Applicative f => Data.Functor.Monoidal.Unital (->) () () f
+ Data.Functor.Monoidal: instance (Control.Arrow.ArrowZero a, Control.Arrow.ArrowPlus a) => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Control.Applicative.WrappedArrow a b)
+ Data.Functor.Monoidal: instance (Control.Arrow.ArrowZero a, Control.Arrow.ArrowPlus a) => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Control.Applicative.WrappedArrow a b)
+ Data.Functor.Monoidal: instance (Control.Arrow.ArrowZero a, Control.Arrow.ArrowPlus a) => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Control.Applicative.WrappedArrow a b)
+ Data.Functor.Monoidal: instance (Data.Semialign.Internal.Semialign f, Data.Semialign.Internal.Semialign g) => Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) (Data.Functor.Compose.Compose f g)
+ Data.Functor.Monoidal: instance (Data.Semialign.Internal.Semialign f, Data.Semialign.Internal.Semialign g) => Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) (Data.Functor.Product.Product f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Alternative g) => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Data.Functor.Product.Product f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Alternative g) => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (f GHC.Generics.:*: g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Alternative g) => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Data.Functor.Product.Product f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Alternative g) => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (f GHC.Generics.:*: g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Alternative g) => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Data.Functor.Product.Product f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Alternative g) => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (f GHC.Generics.:*: g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Data.Functor.Compose.Compose f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (f GHC.Generics.:.: g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Data.Functor.Compose.Compose f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (f GHC.Generics.:.: g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Data.Functor.Compose.Compose f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Alternative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (f GHC.Generics.:.: g)
+ Data.Functor.Monoidal: instance (GHC.Base.Applicative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Monoidal (->) (,) () (,) () (Data.Functor.Compose.Compose f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Applicative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Monoidal (->) (,) () (,) () (Data.Functor.Product.Product f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Applicative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Semigroupal (->) (,) (,) (Data.Functor.Compose.Compose f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Applicative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Semigroupal (->) (,) (,) (Data.Functor.Product.Product f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Applicative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Unital (->) () () (Data.Functor.Compose.Compose f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Applicative f, GHC.Base.Applicative g) => Data.Functor.Monoidal.Unital (->) () () (Data.Functor.Product.Product f g)
+ Data.Functor.Monoidal: instance (GHC.Base.Monoid x1, GHC.Base.Monoid x2) => Data.Functor.Monoidal.Monoidal (->) (,) () (,) () ((,,) x1 x2)
+ Data.Functor.Monoidal: instance (GHC.Base.Monoid x1, GHC.Base.Monoid x2) => Data.Functor.Monoidal.Semigroupal (->) (,) (,) ((,,) x1 x2)
+ Data.Functor.Monoidal: instance (GHC.Base.Monoid x1, GHC.Base.Monoid x2) => Data.Functor.Monoidal.Unital (->) () () ((,,) x1 x2)
+ Data.Functor.Monoidal: instance (GHC.Base.Monoid x1, GHC.Base.Monoid x2, GHC.Base.Monoid x3) => Data.Functor.Monoidal.Monoidal (->) (,) () (,) () ((,,,) x1 x2 x3)
+ Data.Functor.Monoidal: instance (GHC.Base.Monoid x1, GHC.Base.Monoid x2, GHC.Base.Monoid x3) => Data.Functor.Monoidal.Semigroupal (->) (,) (,) ((,,,) x1 x2 x3)
+ Data.Functor.Monoidal: instance (GHC.Base.Monoid x1, GHC.Base.Monoid x2, GHC.Base.Monoid x3) => Data.Functor.Monoidal.Unital (->) () () ((,,,) x1 x2 x3)
+ Data.Functor.Monoidal: instance Control.Arrow.ArrowPlus a => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Control.Arrow.ArrowMonad a)
+ Data.Functor.Monoidal: instance Control.Arrow.ArrowPlus a => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Control.Arrow.ArrowMonad a)
+ Data.Functor.Monoidal: instance Control.Arrow.ArrowPlus a => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Control.Arrow.ArrowMonad a)
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) (,) () (,) () (Data.Either.Either e)
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) (,) () (,) () Control.Applicative.ZipList
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) (,) () (,) () Data.Functor.Identity.Identity
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) (,) () (,) () GHC.Base.NonEmpty
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) (,) () (,) () GHC.Maybe.Maybe
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) (,) () (,) () GHC.Types.IO
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) (,) () (,) () []
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () Control.Applicative.ZipList
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () Data.Proxy.Proxy
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () GHC.Conc.Sync.STM
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () GHC.Generics.U1
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () GHC.Maybe.Maybe
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () GHC.Types.IO
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () Text.ParserCombinators.ReadP.ReadP
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () Text.ParserCombinators.ReadPrec.ReadPrec
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () []
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) (,) (,) (Data.Either.Either e)
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) (,) (,) Control.Applicative.ZipList
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) (,) (,) Data.Functor.Identity.Identity
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) (,) (,) GHC.Base.NonEmpty
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) (,) (,) GHC.Maybe.Maybe
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) (,) (,) GHC.Types.IO
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) (,) (,) []
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) Control.Applicative.ZipList
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) Data.Proxy.Proxy
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) GHC.Conc.Sync.STM
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) GHC.Generics.U1
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) GHC.Maybe.Maybe
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) GHC.Types.IO
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) Text.ParserCombinators.ReadP.ReadP
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) Text.ParserCombinators.ReadPrec.ReadPrec
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) []
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) (Data.Tagged.Tagged b)
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) Control.Applicative.ZipList
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) Data.Functor.Identity.Identity
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) Data.Proxy.Proxy
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) GHC.Base.NonEmpty
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) GHC.Maybe.Maybe
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) []
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) () () (Data.Either.Either e)
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) () () Control.Applicative.ZipList
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) () () Data.Functor.Identity.Identity
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) () () GHC.Base.NonEmpty
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) () () GHC.Maybe.Maybe
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) () () GHC.Types.IO
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) () () []
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () Control.Applicative.ZipList
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () Data.Proxy.Proxy
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () GHC.Conc.Sync.STM
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () GHC.Generics.U1
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () GHC.Maybe.Maybe
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () GHC.Types.IO
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () Text.ParserCombinators.ReadP.ReadP
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () Text.ParserCombinators.ReadPrec.ReadPrec
+ Data.Functor.Monoidal: instance Data.Functor.Monoidal.Unital (->) Data.Void.Void () []
+ Data.Functor.Monoidal: instance Data.Semialign.Internal.Semialign f => Data.Functor.Monoidal.Semigroupal (->) Data.These.These (,) (Data.Functor.Monoidal.FromSemialign f)
+ Data.Functor.Monoidal: instance Data.Semialign.Internal.Semialign f => Data.Semialign.Internal.Semialign (Data.Functor.Monoidal.FromSemialign f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Data.Functor.Monoidal.FromAlternative f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Data.Monoid.Ap f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Data.Semigroup.Internal.Alt f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (GHC.Generics.M1 i c f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (GHC.Generics.Rec1 f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Data.Functor.Monoidal.FromAlternative f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Data.Monoid.Ap f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Data.Semigroup.Internal.Alt f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (GHC.Generics.M1 i c f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (GHC.Generics.Rec1 f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Data.Functor.Monoidal.FromAlternative f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Data.Monoid.Ap f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Data.Semigroup.Internal.Alt f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (GHC.Generics.M1 i c f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (GHC.Generics.Rec1 f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative f => GHC.Base.Alternative (Data.Functor.Monoidal.FromAlternative f)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative m => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Control.Arrow.Kleisli m a)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative m => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Control.Arrow.Kleisli m a)
+ Data.Functor.Monoidal: instance GHC.Base.Alternative m => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Control.Arrow.Kleisli m a)
+ Data.Functor.Monoidal: instance GHC.Base.Applicative f => Data.Functor.Monoidal.Monoidal (->) (,) () (,) () (Data.Functor.Monoidal.FromApplicative f)
+ Data.Functor.Monoidal: instance GHC.Base.Applicative f => Data.Functor.Monoidal.Semigroupal (->) (,) (,) (Data.Functor.Monoidal.FromApplicative f)
+ Data.Functor.Monoidal: instance GHC.Base.Applicative f => Data.Functor.Monoidal.Unital (->) () () (Data.Functor.Monoidal.FromApplicative f)
+ Data.Functor.Monoidal: instance GHC.Base.Applicative f => GHC.Base.Applicative (Data.Functor.Monoidal.FromAlternative f)
+ Data.Functor.Monoidal: instance GHC.Base.Applicative f => GHC.Base.Applicative (Data.Functor.Monoidal.FromApplicative f)
+ Data.Functor.Monoidal: instance GHC.Base.Functor f => GHC.Base.Functor (Data.Functor.Monoidal.FromAlternative f)
+ Data.Functor.Monoidal: instance GHC.Base.Functor f => GHC.Base.Functor (Data.Functor.Monoidal.FromApplicative f)
+ Data.Functor.Monoidal: instance GHC.Base.Functor f => GHC.Base.Functor (Data.Functor.Monoidal.FromSemialign f)
+ Data.Functor.Monoidal: instance GHC.Base.MonadPlus m => Data.Functor.Monoidal.Monoidal (->) Data.Either.Either Data.Void.Void (,) () (Control.Applicative.WrappedMonad m)
+ Data.Functor.Monoidal: instance GHC.Base.MonadPlus m => Data.Functor.Monoidal.Semigroupal (->) Data.Either.Either (,) (Control.Applicative.WrappedMonad m)
+ Data.Functor.Monoidal: instance GHC.Base.MonadPlus m => Data.Functor.Monoidal.Unital (->) Data.Void.Void () (Control.Applicative.WrappedMonad m)
+ Data.Functor.Monoidal: instance GHC.Base.Monoid x1 => Data.Functor.Monoidal.Monoidal (->) (,) () (,) () ((,) x1)
+ Data.Functor.Monoidal: instance GHC.Base.Monoid x1 => Data.Functor.Monoidal.Semigroupal (->) (,) (,) ((,) x1)
+ Data.Functor.Monoidal: instance GHC.Base.Monoid x1 => Data.Functor.Monoidal.Unital (->) () () ((,) x1)
Files
- CHANGELOG.md +5/−0
- monoidal-functors.cabal +1/−1
- src/Data/Functor/Monoidal.hs +151/−13
CHANGELOG.md view
@@ -2,6 +2,11 @@ ## Upcoming +## 0.2.1.0 -- 2023-01-29++* Rewrite `Semigroupal`, `Unital`, and `Monoidal` `Functor` instances+ to use deriving via+ ## 0.2.0.0 -- 2023-01-29 * Adds Tensored Type
monoidal-functors.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.4 name: monoidal-functors category: Control, Categories-version: 0.2.0.0+version: 0.2.1.0 license: MIT license-file: LICENSE author: Solomon Bothwell & Asad Saeeduddin
src/Data/Functor/Monoidal.hs view
@@ -10,11 +10,27 @@ ) where +--------------------------------------------------------------------------------+ import Control.Applicative+import Control.Arrow (ArrowMonad, ArrowPlus, ArrowZero, Kleisli) import Control.Category.Tensor+import Control.Monad (MonadPlus) import Data.Align+import Data.Functor.Compose (Compose)+import Data.Functor.Identity+import Data.Functor.Product (Product)+import Data.Kind (Type)+import Data.List.NonEmpty (NonEmpty)+import Data.Monoid (Alt, Ap)+import Data.Proxy (Proxy)+import Data.Tagged (Tagged) import Data.These import Data.Void+import GHC.Conc (STM)+import GHC.Generics (M1, Rec1, U1, type (:*:), type (:.:))+import Text.ParserCombinators.ReadP (ReadP)+import Text.ParserCombinators.ReadPrec (ReadPrec) import Prelude --------------------------------------------------------------------------------@@ -59,18 +75,72 @@ -- Just (Right "hello") combine :: (f x `t0` f x') `cat` f (x `t1` x') -instance Applicative f => Semigroupal (->) (,) (,) f where- combine :: (f x, f x') -> f (x, x')+newtype FromApplicative f a = FromApplicative (f a)+ deriving newtype (Functor, Applicative)++instance Applicative f => Semigroupal (->) (,) (,) (FromApplicative f) where+ combine :: (FromApplicative f x, FromApplicative f x') -> FromApplicative f (x, x') combine = uncurry (liftA2 (,)) -instance Alternative f => Semigroupal (->) Either (,) f where- combine :: (f x, f x') -> f (Either x x')+deriving via FromApplicative Identity instance Semigroupal (->) (,) (,) Identity+deriving via FromApplicative (Compose f g) instance (Applicative f, Applicative g) => Semigroupal (->) (,) (,) (Compose f g)+deriving via FromApplicative [] instance Semigroupal (->) (,) (,) []+deriving via FromApplicative ZipList instance Semigroupal (->) (,) (,) ZipList+deriving via FromApplicative NonEmpty instance Semigroupal (->) (,) (,) NonEmpty+deriving via FromApplicative Maybe instance Semigroupal (->) (,) (,) Maybe+deriving via FromApplicative (Either e) instance Semigroupal (->) (,) (,) (Either e)+deriving via FromApplicative IO instance Semigroupal (->) (,) (,) IO+deriving via FromApplicative (Product f g) instance (Applicative f, Applicative g) => Semigroupal (->) (,) (,) (Product f g)+deriving via (FromApplicative ((,) x1)) instance (Monoid x1) => Semigroupal (->) (,) (,) ((,) x1)+deriving via (FromApplicative ((,,) x1 x2)) instance (Monoid x1, Monoid x2) => Semigroupal (->) (,) (,) ((,,) x1 x2)+deriving via (FromApplicative ((,,,) x1 x2 x3)) instance (Monoid x1, Monoid x2, Monoid x3) => Semigroupal (->) (,) (,) ((,,,) x1 x2 x3)++newtype FromAlternative f a = FromAlternative (f a)+ deriving newtype (Functor, Applicative, Alternative)++instance Alternative f => Semigroupal (->) Either (,) (FromAlternative f) where+ combine :: (FromAlternative f x, FromAlternative f x') -> FromAlternative f (Either x x') combine (fx, fx') = fmap Left fx <|> fmap Right fx' -instance Semialign f => Semigroupal (->) These (,) f where- combine :: (f x, f x') -> f (These x x')+deriving via FromAlternative ZipList instance Semigroupal (->) Either (,) ZipList+deriving via FromAlternative STM instance Semigroupal (->) Either (,) STM+deriving via FromAlternative ReadP instance Semigroupal (->) Either (,) ReadP+deriving via FromAlternative ReadPrec instance Semigroupal (->) Either (,) ReadPrec+deriving via FromAlternative IO instance Semigroupal (->) Either (,) IO+deriving via FromAlternative Maybe instance Semigroupal (->) Either (,) Maybe+deriving via FromAlternative [] instance Semigroupal (->) Either (,) []+deriving via FromAlternative (WrappedMonad m) instance (MonadPlus m) => Semigroupal (->) Either (,) (WrappedMonad m)+deriving via FromAlternative (ArrowMonad a) instance (ArrowPlus a) => Semigroupal (->) Either (,) (ArrowMonad a)+deriving via FromAlternative (Proxy :: Type -> Type) instance Semigroupal (->) Either (,) (Proxy :: Type -> Type)+deriving via FromAlternative (U1 :: Type -> Type) instance Semigroupal (->) Either (,) (U1 :: Type -> Type)+deriving via FromAlternative (WrappedArrow a b) instance (ArrowZero a, ArrowPlus a) => Semigroupal (->) Either (,) (WrappedArrow a b)+deriving via FromAlternative (Kleisli m a) instance (Alternative m) => Semigroupal (->) Either (,) (Kleisli m a)+deriving via FromAlternative (Ap f) instance (Alternative f) => Semigroupal (->) Either (,) (Ap f)+deriving via FromAlternative (Alt f) instance (Alternative f) => Semigroupal (->) Either (,) (Alt f)+deriving via FromAlternative (Rec1 f) instance (Alternative f) => Semigroupal (->) Either (,) (Rec1 f)+deriving via FromAlternative (Product f g) instance (Alternative f, Alternative g) => Semigroupal (->) Either (,) (Product f g)+deriving via FromAlternative (f :*: g) instance (Alternative f, Alternative g) => Semigroupal (->) Either (,) (f :*: g)+deriving via FromAlternative (f `Compose` g) instance (Alternative f, Applicative g) => Semigroupal (->) Either (,) (f `Compose` g)+deriving via FromAlternative (f :.: g) instance (Alternative f, Applicative g) => Semigroupal (->) Either (,) (f :.: g)+deriving via FromAlternative (M1 i c f) instance (Alternative f) => Semigroupal (->) Either (,) (M1 i c f)++newtype FromSemialign f a = FromSemialign (f a)+ deriving (Functor, Semialign)++instance Semialign f => Semigroupal (->) These (,) (FromSemialign f) where+ combine :: (FromSemialign f x, FromSemialign f x') -> FromSemialign f (These x x') combine = uncurry align +deriving via FromSemialign [] instance Semigroupal (->) These (,) []+deriving via FromSemialign ZipList instance Semigroupal (->) These (,) ZipList+deriving via FromSemialign NonEmpty instance Semigroupal (->) These (,) NonEmpty+deriving via FromSemialign Maybe instance Semigroupal (->) These (,) Maybe+deriving via FromSemialign Identity instance Semigroupal (->) These (,) Identity+deriving via FromSemialign (Proxy :: Type -> Type) instance Semigroupal (->) These (,) (Proxy :: Type -> Type)+deriving via FromSemialign (Tagged b) instance Semigroupal (->) These (,) (Tagged b)+deriving via FromSemialign (Product f g) instance (Semialign f, Semialign g) => Semigroupal (->) These (,) (Product f g)+deriving via FromSemialign (f `Compose` g) instance (Semialign f, Semialign g) => Semigroupal (->) These (,) (f `Compose` g)+ -------------------------------------------------------------------------------- -- | Given monoidal categories \((\mathcal{C}, \otimes, I_{\mathcal{C}})\) and \((\mathcal{D}, \bullet, I_{\mathcal{D}})\).@@ -92,14 +162,49 @@ -- Nothing introduce :: cat i0 (f i1) -instance Applicative f => Unital (->) () () f where- introduce :: () -> f ()+instance Applicative f => Unital (->) () () (FromApplicative f) where+ introduce :: () -> FromApplicative f () introduce = pure -instance Alternative f => Unital (->) Void () f where- introduce :: () -> f Void+deriving via FromApplicative Identity instance Unital (->) () () Identity+deriving via FromApplicative (Compose f g) instance (Applicative f, Applicative g) => Unital (->) () () (Compose f g)+deriving via FromApplicative [] instance Unital (->) () () []+deriving via FromApplicative ZipList instance Unital (->) () () ZipList+deriving via FromApplicative NonEmpty instance Unital (->) () () NonEmpty+deriving via FromApplicative Maybe instance Unital (->) () () Maybe+deriving via FromApplicative (Either e) instance Unital (->) () () (Either e)+deriving via FromApplicative IO instance Unital (->) () () IO+deriving via FromApplicative (Product f g) instance (Applicative f, Applicative g) => Unital (->) () () (Product f g)+deriving via (FromApplicative ((,) x1)) instance (Monoid x1) => Unital (->) () () ((,) x1)+deriving via (FromApplicative ((,,) x1 x2)) instance (Monoid x1, Monoid x2) => Unital (->) () () ((,,) x1 x2)+deriving via (FromApplicative ((,,,) x1 x2 x3)) instance (Monoid x1, Monoid x2, Monoid x3) => Unital (->) () () ((,,,) x1 x2 x3)++instance Alternative f => Unital (->) Void () (FromAlternative f) where+ introduce :: () -> FromAlternative f Void introduce () = empty +deriving via FromAlternative ZipList instance Unital (->) Void () ZipList+deriving via FromAlternative STM instance Unital (->) Void () STM+deriving via FromAlternative ReadP instance Unital (->) Void () ReadP+deriving via FromAlternative ReadPrec instance Unital (->) Void () ReadPrec+deriving via FromAlternative IO instance Unital (->) Void () IO+deriving via FromAlternative Maybe instance Unital (->) Void () Maybe+deriving via FromAlternative [] instance Unital (->) Void () []+deriving via FromAlternative (WrappedMonad m) instance (MonadPlus m) => Unital (->) Void () (WrappedMonad m)+deriving via FromAlternative (ArrowMonad a) instance (ArrowPlus a) => Unital (->) Void () (ArrowMonad a)+deriving via FromAlternative (Proxy :: Type -> Type) instance Unital (->) Void () (Proxy :: Type -> Type)+deriving via FromAlternative (U1 :: Type -> Type) instance Unital (->) Void () (U1 :: Type -> Type)+deriving via FromAlternative (WrappedArrow a b) instance (ArrowZero a, ArrowPlus a) => Unital (->) Void () (WrappedArrow a b)+deriving via FromAlternative (Kleisli m a) instance (Alternative m) => Unital (->) Void () (Kleisli m a)+deriving via FromAlternative (Ap f) instance (Alternative f) => Unital (->) Void () (Ap f)+deriving via FromAlternative (Alt f) instance (Alternative f) => Unital (->) Void () (Alt f)+deriving via FromAlternative (Rec1 f) instance (Alternative f) => Unital (->) Void () (Rec1 f)+deriving via FromAlternative (Product f g) instance (Alternative f, Alternative g) => Unital (->) Void () (Product f g)+deriving via FromAlternative (f :*: g) instance (Alternative f, Alternative g) => Unital (->) Void () (f :*: g)+deriving via FromAlternative (f `Compose` g) instance (Alternative f, Applicative g) => Unital (->) Void () (f `Compose` g)+deriving via FromAlternative (f :.: g) instance (Alternative f, Applicative g) => Unital (->) Void () (f :.: g)+deriving via FromAlternative (M1 i c f) instance (Alternative f) => Unital (->) Void () (M1 i c f)+ -------------------------------------------------------------------------------- -- | Given monoidal categories \((\mathcal{C}, \otimes, I_{\mathcal{C}})\) and \((\mathcal{D}, \bullet, I_{\mathcal{D}})\).@@ -145,8 +250,41 @@ , Unital cat i1 i0 f ) => Monoidal cat t1 i1 t0 i0 f -instance Applicative f => Monoidal (->) (,) () (,) () f+instance Applicative f => Monoidal (->) (,) () (,) () (FromApplicative f) -instance Alternative f => Monoidal (->) Either Void (,) () f+deriving via FromApplicative Identity instance Monoidal (->) (,) () (,) () Identity+deriving via FromApplicative (Compose f g) instance (Applicative f, Applicative g) => Monoidal (->) (,) () (,) () (Compose f g)+deriving via FromApplicative [] instance Monoidal (->) (,) () (,) () []+deriving via FromApplicative ZipList instance Monoidal (->) (,) () (,) () ZipList+deriving via FromApplicative NonEmpty instance Monoidal (->) (,) () (,) () NonEmpty+deriving via FromApplicative Maybe instance Monoidal (->) (,) () (,) () Maybe+deriving via FromApplicative (Either e) instance Monoidal (->) (,) () (,) () (Either e)+deriving via FromApplicative IO instance Monoidal (->) (,) () (,) () IO+deriving via FromApplicative (Product f g) instance (Applicative f, Applicative g) => Monoidal (->) (,) () (,) () (Product f g)+deriving via (FromApplicative ((,) x1)) instance (Monoid x1) => Monoidal (->) (,) () (,) () ((,) x1)+deriving via (FromApplicative ((,,) x1 x2)) instance (Monoid x1, Monoid x2) => Monoidal (->) (,) () (,) () ((,,) x1 x2)+deriving via (FromApplicative ((,,,) x1 x2 x3)) instance (Monoid x1, Monoid x2, Monoid x3) => Monoidal (->) (,) () (,) () ((,,,) x1 x2 x3) -instance (Alternative f, Semialign f) => Monoidal (->) These Void (,) () f+instance Alternative f => Monoidal (->) Either Void (,) () (FromAlternative f)++deriving via FromAlternative ZipList instance Monoidal (->) Either Void (,) () ZipList+deriving via FromAlternative STM instance Monoidal (->) Either Void (,) () STM+deriving via FromAlternative ReadP instance Monoidal (->) Either Void (,) () ReadP+deriving via FromAlternative ReadPrec instance Monoidal (->) Either Void (,) () ReadPrec+deriving via FromAlternative IO instance Monoidal (->) Either Void (,) () IO+deriving via FromAlternative Maybe instance Monoidal (->) Either Void (,) () Maybe+deriving via FromAlternative [] instance Monoidal (->) Either Void (,) () []+deriving via FromAlternative (WrappedMonad m) instance (MonadPlus m) => Monoidal (->) Either Void (,) () (WrappedMonad m)+deriving via FromAlternative (ArrowMonad a) instance (ArrowPlus a) => Monoidal (->) Either Void (,) () (ArrowMonad a)+deriving via FromAlternative (Proxy :: Type -> Type) instance Monoidal (->) Either Void (,) () (Proxy :: Type -> Type)+deriving via FromAlternative (U1 :: Type -> Type) instance Monoidal (->) Either Void (,) () (U1 :: Type -> Type)+deriving via FromAlternative (WrappedArrow a b) instance (ArrowZero a, ArrowPlus a) => Monoidal (->) Either Void (,) () (WrappedArrow a b)+deriving via FromAlternative (Kleisli m a) instance (Alternative m) => Monoidal (->) Either Void (,) () (Kleisli m a)+deriving via FromAlternative (Ap f) instance (Alternative f) => Monoidal (->) Either Void (,) () (Ap f)+deriving via FromAlternative (Alt f) instance (Alternative f) => Monoidal (->) Either Void (,) () (Alt f)+deriving via FromAlternative (Rec1 f) instance (Alternative f) => Monoidal (->) Either Void (,) () (Rec1 f)+deriving via FromAlternative (Product f g) instance (Alternative f, Alternative g) => Monoidal (->) Either Void (,) () (Product f g)+deriving via FromAlternative (f :*: g) instance (Alternative f, Alternative g) => Monoidal (->) Either Void (,) () (f :*: g)+deriving via FromAlternative (f `Compose` g) instance (Alternative f, Applicative g) => Monoidal (->) Either Void (,) () (f `Compose` g)+deriving via FromAlternative (f :.: g) instance (Alternative f, Applicative g) => Monoidal (->) Either Void (,) () (f :.: g)+deriving via FromAlternative (M1 i c f) instance (Alternative f) => Monoidal (->) Either Void (,) () (M1 i c f)