HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulesemigroupoids-6.0.1Haskell2010

Data.Functor.Extend

  • 1 class
  • 2 values

Extendable Functors

3 declarations

There are two ways to define an Extend instance:

I. Provide definitions for extended satisfying this law:

extended f . extended g = extended (f . extended g)

II. Alternately, you may choose to provide definitions for duplicated satisfying this law:

duplicated . duplicated = fmap duplicated . duplicated

You may of course, choose to define both duplicated and extended. In that case you must also satisfy these laws:

extended f = fmap f . duplicated
duplicated = extended id

These are the default definitions of extended and duplicated.

classclass Functor w => Extend (w :: Type -> Type) where
#

Methods

  • duplicated :: w a -> w (w a)
    duplicated = extended id
    fmap (fmap f) . duplicated = duplicated . fmap f
  • extended :: (w a -> b) -> w a -> w b
    extended f  = fmap f . duplicated
Instances33Extend, …
  • Extend FirstDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend LastDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend MaxDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend MinDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend SeqDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend TreeDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend NonEmptyDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend IdentityDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend DualDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend ProductDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend SumDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend Par1Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend MaybeDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend []Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend U1Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend V1Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend (Either a)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend (Tuple2 e)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend f => Extend (MaybeApply f)Defined in semigroupoids-6.0.1 · Data.Functor.Bind.Class
  • Extend (Tagged a)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend f => Extend (Alt f)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend f => Extend (Rec1 f)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend w => Extend (EnvT e w)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend w => Extend (StoreT s w)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend w => Extend (IdentityT w)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • (Extend f, Semigroup a) => Extend (Static f a)Defined in semigroupoids-6.0.1 · Data.Semigroupoid.Static
  • (Extend w, Semigroup m) => Extend (TracedT m w)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Semigroup m => Extend ((->) m)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend (K1 i c)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • (Extend f, Extend g) => Extend (Sum f g)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • (Extend f, Extend g) => Extend (f :+: g)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Extend f => Extend (M1 i t f)Defined in semigroupoids-6.0.1 · Data.Functor.Extend
valuegduplicated :: (Extend (Rep1 w), Generic1 w) => w a -> w (w a)
#

Generic duplicated. Caveats:

  1. Will not compile if w is a product type.

  2. Will not compile if w contains fields where the type variable appears underneath the composition of type constructors (e.g., f (g a)).