Copyright | (c) 2019-2021 Rudy Matela |
---|---|
License | 3-Clause BSD (see the file LICENSE) |
Maintainer | Rudy Matela <rudy@matela.com.br> |
Safe Haskell | None |
Language | Haskell2010 |
Template Haskell utilities.
Synopsis
- reallyDeriveCascading :: Name -> (Name -> DecsQ) -> Name -> DecsQ
- deriveWhenNeeded :: Name -> (Name -> DecsQ) -> Name -> DecsQ
- deriveWhenNeededOrWarn :: Name -> (Name -> DecsQ) -> Name -> DecsQ
- typeConArgs :: Name -> Q [Name]
- typeConArgsThat :: Name -> (Name -> Q Bool) -> Q [Name]
- typeConCascadingArgsThat :: Name -> (Name -> Q Bool) -> Q [Name]
- normalizeType :: Name -> Q (Type, [Type])
- normalizeTypeUnits :: Name -> Q Type
- isInstanceOf :: Name -> Name -> Q Bool
- isntInstanceOf :: Name -> Name -> Q Bool
- typeArity :: Name -> Q Int
- typeConstructors :: Name -> Q [(Name, [Type])]
- isTypeSynonym :: Name -> Q Bool
- typeSynonymType :: Name -> Q Type
- mergeIFns :: DecsQ -> DecsQ
- mergeI :: DecsQ -> DecsQ -> DecsQ
- lookupValN :: String -> Q Name
- showJustName :: Name -> String
- typeConstructorsArgNames :: Name -> Q [(Name, [Name])]
- (|=>|) :: Cxt -> DecsQ -> DecsQ
- (|++|) :: DecsQ -> DecsQ -> DecsQ
- whereI :: DecsQ -> [Dec] -> DecsQ
- module Language.Haskell.TH
Documentation
typeArity :: Name -> Q Int Source #
Given a type name, return the number of arguments taken by that type. Examples in partially broken TH:
arity ''Int === Q 0 arity ''Int->Int === Q 0 arity ''Maybe === Q 1 arity ''Either === Q 2 arity ''Int-> === Q 1
This works for Data's and Newtype's and it is useful when generating typeclass instances.
showJustName :: Name -> String Source #
module Language.Haskell.TH