ghc-lib-9.4.8.20231111: The GHC API, decoupled from GHC versions
Safe HaskellSafe-Inferred
LanguageHaskell2010

GHC.Tc.Deriv.Functor

Description

The deriving code for the Functor, Foldable, and Traversable classes

Synopsis

Documentation

data FFoldType a Source #

Constructors

FT 

Fields

  • ft_triv :: a

    Does not contain variable

  • ft_var :: a

    The variable itself

  • ft_co_var :: a

    The variable itself, contravariantly

  • ft_fun :: a -> a -> a

    Function type

  • ft_tup :: TyCon -> [a] -> a

    Tuple type. The [a] is the result of folding over the arguments of the tuple.

  • ft_ty_app :: Type -> Type -> a -> a

    Type app, variable only in last argument. The two Types are the function and argument parts of fun_ty arg_ty, respectively.

  • ft_bad_app :: a

    Type app, variable other than in last argument

  • ft_forall :: TcTyVar -> a -> a

    Forall type

functorLikeTraverse Source #

Arguments

:: forall a. TyVar

Variable to look for

-> FFoldType a

How to fold

-> Type

Type to process

-> a 

deepSubtypesContaining :: TyVar -> Type -> [TcType] Source #

Return all syntactic subterms of a Type that are applied to the TyVar argument. This determines what constraints should be inferred for derived Functor, Foldable, and Traversable instances in GHC.Tc.Deriv.Infer. For instance, if we have:

data Foo a = MkFoo Int a (Maybe a) (Either Int (Maybe a))

Then the following would hold:

As used in GHC.Tc.Deriv.Infer, the Type argument will always come from derivDataConInstArgTys, so it is important that the TyVar comes from dataConUnivTyVars to match. Make sure not to take the TyVar from tyConTyVars, as these differ from the dataConUnivTyVars when the data type is a GADT. (See #22167 for what goes wrong if tyConTyVars is used.)