-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Generic programming library for generalised deriving. -- -- This package provides functionality for generalising the deriving -- mechanism in Haskell to arbitrary classes. It was first described in -- the paper: -- -- -- -- The current implementation integrates with the new GHC Generics. See -- http://www.haskell.org/haskellwiki/GHC.Generics for more -- information. Template Haskell code is provided for supporting GHC -- before version 7.2. @package generic-deriving @version 1.2.2 module Generics.Deriving.Instances module Generics.Deriving.Base -- | Void: used for datatypes without constructors data V1 p :: * -> * -- | Unit: used for constructors without arguments data U1 p :: * -> * U1 :: U1 p -- | Used for marking occurrences of the parameter newtype Par1 p :: * -> * Par1 :: p -> Par1 p unPar1 :: Par1 p -> p -- | Recursive calls of kind * -> * newtype Rec1 (f :: * -> *) p :: (* -> *) -> * -> * Rec1 :: f p -> Rec1 p unRec1 :: Rec1 p -> f p -- | Constants, additional parameters and recursion of kind * newtype K1 i c p :: * -> * -> * -> * K1 :: c -> K1 i c p unK1 :: K1 i c p -> c -- | Meta-information (constructor names, etc.) newtype M1 i c (f :: * -> *) p :: * -> * -> (* -> *) -> * -> * M1 :: f p -> M1 i c p unM1 :: M1 i c p -> f p -- | Sums: encode choice between constructors data (:+:) (f :: * -> *) (g :: * -> *) p :: (* -> *) -> (* -> *) -> * -> * L1 :: f p -> :+: p R1 :: g p -> :+: p -- | Products: encode multiple arguments to constructors data (:*:) (f :: * -> *) (g :: * -> *) p :: (* -> *) -> (* -> *) -> * -> * (:*:) :: f p -> g p -> :*: p -- | Composition of functors newtype (:.:) (f :: * -> *) (g :: * -> *) p :: (* -> *) -> (* -> *) -> * -> * Comp1 :: f (g p) -> :.: p unComp1 :: :.: p -> f (g p) -- | Type synonym for encoding recursion (of kind *) type Rec0 = K1 R -- | Type synonym for encoding parameters (other than the last) type Par0 = K1 P -- | Tag for K1: recursion (of kind *) data R :: * -- | Tag for K1: parameters (other than the last) data P :: * -- | Type synonym for encoding meta-information for datatypes type D1 = M1 D -- | Type synonym for encoding meta-information for constructors type C1 = M1 C -- | Type synonym for encoding meta-information for record selectors type S1 = M1 S -- | Tag for M1: datatype data D :: * -- | Tag for M1: constructor data C :: * -- | Tag for M1: record selector data S :: * -- | Class for datatypes that represent datatypes class Datatype d datatypeName :: Datatype d => t d f a -> [Char] moduleName :: Datatype d => t d f a -> [Char] -- | Class for datatypes that represent data constructors class Constructor c conName :: Constructor c => t c f a -> [Char] conFixity :: Constructor c => t c f a -> Fixity conIsRecord :: Constructor c => t c f a -> Bool -- | Class for datatypes that represent records class Selector s selName :: Selector s => t s f a -> [Char] -- | Used for constructor fields without a name data NoSelector :: * -- | Datatype to represent the fixity of a constructor. An infix | -- declaration directly corresponds to an application of Infix. data Fixity :: * Prefix :: Fixity Infix :: Associativity -> Int -> Fixity -- | Datatype to represent the associativity of a constructor data Associativity :: * LeftAssociative :: Associativity RightAssociative :: Associativity NotAssociative :: Associativity -- | Datatype to represent the arity of a tuple. data Arity :: * NoArity :: Arity Arity :: Int -> Arity -- | Get the precedence of a fixity value. prec :: Fixity -> Int -- | Representable types of kind *. This class is derivable in GHC with the -- DeriveGeneric flag on. class Generic a where type family Rep a1 :: * -> * from :: Generic a => a -> Rep a x to :: Generic a => Rep a x -> a -- | Representable types of kind * -> * (not yet derivable) class Generic1 (f :: * -> *) where type family Rep1 (f1 :: * -> *) :: * -> * from1 :: Generic1 f => f a -> Rep1 f a to1 :: Generic1 f => Rep1 f a -> f a -- | Summary: Return the name of all the constructors of a type. module Generics.Deriving.ConNames class ConNames f gconNames :: ConNames f => f a -> [String] -- | Return the name of all the constructors of the type of the given term. conNames :: (Generic a, ConNames (Rep a)) => a -> [String] instance Constructor c => ConNames (C1 c f) instance ConNames f => ConNames (D1 c f) instance (ConNames f, ConNames g) => ConNames (f :+: g) module Generics.Deriving.Eq class GEq a where geq x y = geq' (from x) (from y) geq :: GEq a => a -> a -> Bool instance GEq a => GEq [a] instance GEq a => GEq (Maybe a) instance GEq Float instance GEq Int instance GEq Char instance (GEq' a, GEq' b) => GEq' (a :*: b) instance (GEq' a, GEq' b) => GEq' (a :+: b) instance GEq' a => GEq' (M1 i c a) instance GEq c => GEq' (K1 i c) instance GEq' U1 module Generics.Deriving.Enum class GEnum a where genum = genumDefault genum :: GEnum a => [a] genumDefault :: (Generic a, Enum' (Rep a)) => [a] toEnumDefault :: (Generic a, Enum' (Rep a)) => Int -> a fromEnumDefault :: (GEq a, Generic a, Enum' (Rep a)) => a -> Int class Ord a => GIx a where range = rangeDefault index = indexDefault inRange = inRangeDefault range :: GIx a => (a, a) -> [a] index :: GIx a => (a, a) -> a -> Int inRange :: GIx a => (a, a) -> a -> Bool rangeDefault :: (GEq a, Generic a, Enum' (Rep a)) => (a, a) -> [a] indexDefault :: (GEq a, Generic a, Enum' (Rep a)) => (a, a) -> a -> Int inRangeDefault :: (GEq a, Generic a, Enum' (Rep a)) => (a, a) -> a -> Bool instance GIx Int instance (GEq a, GEnum a, GIx a) => GIx [a] instance (GEq a, GEnum a, GIx a) => GIx (Maybe a) instance GEnum Int instance GEnum a => GEnum [a] instance GEnum a => GEnum (Maybe a) instance (Enum' f, Enum' g) => Enum' (f :*: g) instance (Enum' f, Enum' g) => Enum' (f :+: g) instance Enum' f => Enum' (M1 i c f) instance GEnum c => Enum' (K1 i c) instance Enum' U1 module Generics.Deriving.Functor class GFunctor f where gmap = gmapdefault gmap :: GFunctor f => (a -> b) -> f a -> f b gmapdefault :: (Generic1 f, GFunctor' (Rep1 f)) => (a -> b) -> f a -> f b instance GFunctor [] instance GFunctor Maybe instance (GFunctor f, GFunctor' g) => GFunctor' (f :.: g) instance (GFunctor' f, GFunctor' g) => GFunctor' (f :*: g) instance (GFunctor' f, GFunctor' g) => GFunctor' (f :+: g) instance GFunctor' f => GFunctor' (M1 i c f) instance GFunctor f => GFunctor' (Rec1 f) instance GFunctor' (K1 i c) instance GFunctor' Par1 instance GFunctor' U1 module Generics.Deriving.Show class GShow a where gshows = gshowsPrec 0 gshow x = gshows x "" gshowsPrec = gshowsPrecdefault gshowsPrec :: GShow a => Int -> a -> ShowS gshows :: GShow a => a -> ShowS gshow :: GShow a => a -> String gshowsPrecdefault :: (Generic a, GShow' (Rep a)) => Int -> a -> ShowS instance [overlap ok] GShow a => GShow [a] instance [overlap ok] GShow Bool instance [overlap ok] GShow String instance [overlap ok] GShow Float instance [overlap ok] GShow Int instance [overlap ok] GShow Char instance [overlap ok] GShow a => GShow (Maybe a) instance [overlap ok] (GShow' a, GShow' b) => GShow' (a :*: b) instance [overlap ok] (GShow' a, GShow' b) => GShow' (a :+: b) instance [overlap ok] GShow' a => GShow' (M1 D d a) instance [overlap ok] (Selector s, GShow' a) => GShow' (M1 S s a) instance [overlap ok] (GShow' a, Constructor c) => GShow' (M1 C c a) instance [overlap ok] GShow c => GShow' (K1 i c) instance [overlap ok] GShow' U1 module Generics.Deriving.Uniplate class Uniplate a where children = childrendefault children :: Uniplate a => a -> [a] childrendefault :: (Generic a, Uniplate' (Rep a) a) => a -> [a] instance [overlap ok] Uniplate a => Uniplate (Maybe a) instance [overlap ok] Uniplate [a] instance [overlap ok] Uniplate Float instance [overlap ok] Uniplate Int instance [overlap ok] Uniplate Char instance [overlap ok] (Uniplate' f b, Uniplate' g b) => Uniplate' (f :*: g) b instance [overlap ok] (Uniplate' f b, Uniplate' g b) => Uniplate' (f :+: g) b instance [overlap ok] Uniplate' f b => Uniplate' (M1 i c f) b instance [overlap ok] Uniplate' (K1 i a) b instance [overlap ok] Uniplate' (K1 i a) a instance [overlap ok] Uniplate' U1 a -- | This module contains Template Haskell code that can be used to -- automatically generate the boilerplate code for the generic deriving -- library. For now, it generates only the Generic instance. Empty -- datatypes are not yet supported. module Generics.Deriving.TH -- | Given the type and the name (as string) for the type to derive, -- generate the Data instance, the Constructor instances, -- and the Selector instances. deriveMeta :: Name -> Q [Dec] -- | Given a datatype name, derive a datatype and instance of class -- Datatype. deriveData :: Name -> Q [Dec] -- | Given a datatype name, derive datatypes and instances of class -- Constructor. deriveConstructors :: Name -> Q [Dec] -- | Given a datatype name, derive datatypes and instances of class -- Selector. deriveSelectors :: Name -> Q [Dec] instance Lift Associativity instance Lift Fixity module Generics.Deriving