The contravariant analogue of Apply; it is Divisible without conquer.
If one thinks of f a as a consumer of as, then divise allows one
to handle the consumption of a value by splitting it between two
consumers that consume separate parts of a.
divise takes the "splitting" method and the two sub-consumers, and returns the wrapped/combined consumer.
All instances of Divisible should be instances of Divise with
divise = divide.
If a function is polymorphic over Divise f (as opposed to Divisible
f), we can provide a stronger guarantee: namely, that any input consumed
will be passed to at least one sub-consumer. With Divisible f, said input
could potentially disappear into the void, as this is possible with
conquer.
Mathematically, a functor being an instance of Divise means that it is
"semigroupoidal" with respect to the contravariant (tupling) Day
convolution. That is, it is possible to define a function (f in a way that is associative.Day f)
a -> f a
Methods
divise :: (a -> (b, c)) -> f b -> f c -> f aTakes a "splitting" method and the two sub-consumers, and returns the wrapped/combined consumer.
Instances29Divise, …
Divise ComparisonDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise EquivalenceDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise PredicateDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivisible f => Divise (WrappedDivisible f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseThis instance is only available if the
+contravariantcabalflag is enabled.Semigroup r => Divise (Op r)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise U1Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise V1Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseHas no Divisible instance.
Divise m => Divise (MaybeT m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseSemigroup m => Divise (Const m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseSemigroup m => Divise (Constant m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise f => Divise (Alt f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise f => Divise (Rec1 f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise f => Divise (Backwards f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise f => Divise (IdentityT f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise f => Divise (Reverse f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (ExceptT e m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (ReaderT r m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (StateT s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (StateT s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (WriterT w m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (WriterT w m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Divise(Divise f, Divise g) => Divise (Product f g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Divise(Divise f, Divise g) => Divise (f :*: g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise f => Divise (M1 i c f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (RWST r w s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.DiviseDivise m => Divise (RWST r w s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Divise(Apply f, Divise g) => Divise (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Divise(Apply f, Divise g) => Divise (f :.: g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Divise