HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Modulesemigroupoids-6.0.1Haskell2010

Data.Functor.Contravariant.Decide

This module is only available if building with GHC 8.6 or later, or if the +contravariant cabal build flag is available.

  • 1 class
  • 3 values
classclass Contravariant f => Decide (f :: Type -> Type) where
#

The contravariant analogue of Alt.

If one thinks of f a as a consumer of as, then decide allows one to handle the consumption of a value by choosing to handle it via exactly one of two independent consumers. It redirects the input completely into one of two consumers.

decide takes the "decision" method and the two potential consumers, and returns the wrapped/combined consumer.

Mathematically, a functor being an instance of Decide means that it is "semigroupoidal" with respect to the contravariant "either-based" Day convolution (data EitherDay f g a = forall b c. EitherDay (f b) (g c) (a -> Either b c)). That is, it is possible to define a function (f EitherDay f) a -> f a in a way that is associative.

Methods

  • decide :: (a -> Either b c) -> f b -> f c -> f a

    Takes the "decision" method and the two potential consumers, and returns the wrapped/combined consumer.

Instances26Decide, …
  • Decide ComparisonDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide EquivalenceDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide PredicateDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decidable f => Decide (WrappedDivisible f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide

    This instance is only available if the +contravariant cabal flag is enabled.

  • Decide ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide U1Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide V1Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide

    Has no Decidable or Conclude instance.

  • Decide (Op r)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide

    Unlike Decidable, requires no constraint on r.

  • Divise m => Decide (MaybeT m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide f => Decide (Alt f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide f => Decide (Rec1 f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide f => Decide (Backwards f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide f => Decide (IdentityT f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide f => Decide (Reverse f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide m => Decide (ReaderT r m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide m => Decide (StateT s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide m => Decide (StateT s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide m => Decide (WriterT w m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide m => Decide (WriterT w m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • (Decide f, Decide g) => Decide (Product f g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • (Decide f, Decide g) => Decide (f :*: g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide f => Decide (M1 i c f)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide m => Decide (RWST r w s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Decide m => Decide (RWST r w s m)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • (Apply f, Decide g) => Decide (Compose f g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide

    Unlike Decidable, requires only Apply on f.

  • (Apply f, Decide g) => Decide (f :.: g)Defined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide

    Unlike Decidable, requires only Apply on f.

valuegdecide
  1. :: (Generic1 f, Decide (Rep1 f))
  2. => a -> Either b c
  3. -> f b
  4. -> f c
  5. -> f a
#

Generic decide. Caveats:

  1. Will not compile if f is a sum type.

  2. Will not compile if f contains fields that do not mention its type variable.

  3. -XDeriveGeneric is not smart enough to make instances where the type variable appears in negative position.