| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
GHC.Tc.Deriv.Functor
Description
The deriving code for the Functor, Foldable, and Traversable classes
Synopsis
- data FFoldType a = FT {}
- functorLikeTraverse :: forall a. TyVar -> FFoldType a -> Type -> a
- deepSubtypesContaining :: TyVar -> Type -> [TcType]
- foldDataConArgs :: FFoldType a -> DataCon -> DerivInstTys -> [a]
- gen_Functor_binds :: SrcSpan -> DerivInstTys -> (LHsBinds GhcPs, Bag AuxBindSpec)
- gen_Foldable_binds :: SrcSpan -> DerivInstTys -> (LHsBinds GhcPs, Bag AuxBindSpec)
- gen_Traversable_binds :: SrcSpan -> DerivInstTys -> (LHsBinds GhcPs, Bag AuxBindSpec)
Documentation
Constructors
| FT | |
| Fields 
 | |
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:
- deepSubtypesContaininga Int- [], since- Intdoes not contain the type variable- aat all.
- deepSubtypesContaininga a- []. Although the type- acontains the type variable- a, it is not applied to- a, which is the criterion that- deepSubtypesContainingchecks for.
- deepSubtypesContaininga (Maybe a)- [Maybe], as- Maybeis applied to- a.
- deepSubtypesContaininga (Either Int (Maybe a))- [Either Int, Maybe]. Both of these types are applied to- athrough composition.
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.)
foldDataConArgs :: FFoldType a -> DataCon -> DerivInstTys -> [a] Source #
gen_Functor_binds :: SrcSpan -> DerivInstTys -> (LHsBinds GhcPs, Bag AuxBindSpec) Source #
gen_Foldable_binds :: SrcSpan -> DerivInstTys -> (LHsBinds GhcPs, Bag AuxBindSpec) Source #
gen_Traversable_binds :: SrcSpan -> DerivInstTys -> (LHsBinds GhcPs, Bag AuxBindSpec) Source #