{-# Language DeriveDataTypeable, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings,
             StandaloneDeriving, TemplateHaskell, TypeFamilies, TypeOperators, UndecidableInstances #-}

-- | The types of nodes forming the Abstract Syntax Tree of the standard Haskell 2010 language without extensions
module Language.Haskell.AST where

import Control.Monad (forM)
import qualified Data.Kind as Kind
import Data.List.NonEmpty (NonEmpty)
import Data.Data (Data, Typeable)
import Data.Text (Text)

import qualified Language.Haskell.Abstract as Abstract
import qualified Rank2.TH
import qualified Transformation.Deep.TH
import qualified Transformation.Shallow.TH

import Language.Haskell.Extensions (ExtensionSwitch)

-- | The Haskell 2010 language node parameter type
data Language = Language deriving (Typeable Language
Typeable Language =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> Language -> c Language)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Language)
-> (Language -> Constr)
-> (Language -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Language))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language))
-> ((forall b. Data b => b -> b) -> Language -> Language)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Language -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Language -> r)
-> (forall u. (forall d. Data d => d -> u) -> Language -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Language -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Language -> m Language)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Language -> m Language)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Language -> m Language)
-> Data Language
Language -> Constr
Language -> DataType
(forall b. Data b => b -> b) -> Language -> Language
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Language -> u
forall u. (forall d. Data d => d -> u) -> Language -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Language -> m Language
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Language
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Language -> c Language
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Language)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Language -> c Language
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Language -> c Language
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Language
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Language
$ctoConstr :: Language -> Constr
toConstr :: Language -> Constr
$cdataTypeOf :: Language -> DataType
dataTypeOf :: Language -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Language)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Language)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language)
$cgmapT :: (forall b. Data b => b -> b) -> Language -> Language
gmapT :: (forall b. Data b => b -> b) -> Language -> Language
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Language -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Language -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Language -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Language -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Language -> m Language
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Language -> m Language
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
Data, Language -> Language -> Bool
(Language -> Language -> Bool)
-> (Language -> Language -> Bool) -> Eq Language
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Language -> Language -> Bool
== :: Language -> Language -> Bool
$c/= :: Language -> Language -> Bool
/= :: Language -> Language -> Bool
Eq, Int -> Language -> ShowS
[Language] -> ShowS
Language -> String
(Int -> Language -> ShowS)
-> (Language -> String) -> ([Language] -> ShowS) -> Show Language
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Language -> ShowS
showsPrec :: Int -> Language -> ShowS
$cshow :: Language -> String
show :: Language -> String
$cshowList :: [Language] -> ShowS
showList :: [Language] -> ShowS
Show)

instance Abstract.Haskell Language where
   type Module Language = Module Language
   type Declaration Language = Declaration Language
   type Expression Language = Expression Language
   type Type Language = Type Language

   type EquationLHS Language = EquationLHS Language
   type EquationRHS Language = EquationRHS Language
   type GuardedExpression Language = GuardedExpression Language
   type Pattern Language = Pattern Language
   type Statement Language = Statement Language
   type TypeLHS Language = TypeLHS Language
   type ClassInstanceLHS Language = ClassInstanceLHS Language

   type Import Language = Import Language
   type ImportSpecification Language = ImportSpecification Language
   type ImportItem Language = ImportItem Language
   type Export Language = Export Language

   type Context Language = Context Language
   type DataConstructor Language = DataConstructor Language
   type DerivingClause Language = DerivingClause Language
   type FieldDeclaration Language = FieldDeclaration Language
   type FieldBinding Language = FieldBinding Language
   type FieldPattern Language = FieldPattern Language
   type CaseAlternative Language = CaseAlternative Language

   type Constructor Language = Constructor Language
   type Value Language = Value Language

   type CallingConvention Language = CallingConvention Language
   type CallSafety Language = CallSafety Language
   type Associativity Language = Associativity Language
   type Members Language = Members Language
   type Name Language = Name Language
   type ModuleName Language = ModuleName Language
   type QualifiedName Language = QualifiedName Language

   anonymousModule :: forall (s :: * -> *) l (d :: * -> *).
[s (Import l l d d)]
-> [s (Declaration l l d d)] -> Module Language l d s
anonymousModule = [s (Import l l d d)]
-> [s (Declaration l l d d)] -> Module Language l d s
[s (Import l l d d)]
-> [s (Declaration l l d d)] -> Module Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Import l l d d)] -> [s (Declaration l l d d)] -> Module λ l d s
AnonymousModule
   namedModule :: forall (s :: * -> *) l (d :: * -> *).
ModuleName Language
-> Maybe [s (Export l l d d)]
-> [s (Import l l d d)]
-> [s (Declaration l l d d)]
-> Module Language l d s
namedModule = ModuleName Language
-> Maybe [s (Export l l d d)]
-> [s (Import l l d d)]
-> [s (Declaration l l d d)]
-> Module Language l d s
ModuleName Language
-> Maybe [s (Export l l d d)]
-> [s (Import l l d d)]
-> [s (Declaration l l d d)]
-> Module Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
ModuleName λ
-> Maybe [s (Export l l d d)]
-> [s (Import l l d d)]
-> [s (Declaration l l d d)]
-> Module λ l d s
NamedModule
   withLanguagePragma :: forall (s :: * -> *) l (d :: * -> *).
[ExtensionSwitch] -> s (Module l l d d) -> Module Language l d s
withLanguagePragma = [ExtensionSwitch] -> s (Module l l d d) -> Module Language l d s
[ExtensionSwitch] -> s (Module l l d d) -> Module Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[ExtensionSwitch] -> s (Module l l d d) -> Module λ l d s
ExtendedModule

   exportClassOrType :: forall l (d :: * -> *) (s :: * -> *).
QualifiedName Language
-> Maybe (Members Language) -> Export Language l d s
exportClassOrType = QualifiedName Language
-> Maybe (Members Language) -> Export Language l d s
QualifiedName Language
-> Maybe (Members Language) -> Export Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> Maybe (Members λ) -> Export λ l d s
ExportClassOrType
   exportVar :: forall l (d :: * -> *) (s :: * -> *).
QualifiedName Language -> Export Language l d s
exportVar = QualifiedName Language -> Export Language l d s
QualifiedName Language -> Export Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> Export λ l d s
ExportVar
   reExportModule :: forall l (d :: * -> *) (s :: * -> *).
ModuleName Language -> Export Language l d s
reExportModule = ModuleName Language -> Export Language l d s
ModuleName Language -> Export Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
ModuleName λ -> Export λ l d s
ReExportModule

   importDeclaration :: forall (s :: * -> *) l (d :: * -> *).
Bool
-> ModuleName Language
-> Maybe (ModuleName Language)
-> Maybe (s (ImportSpecification l l d d))
-> Import Language l d s
importDeclaration = Bool
-> ModuleName Language
-> Maybe (ModuleName Language)
-> Maybe (s (ImportSpecification l l d d))
-> Import Language l d s
Bool
-> ModuleName Language
-> Maybe (ModuleName Language)
-> Maybe (s (ImportSpecification l l d d))
-> Import Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Bool
-> ModuleName λ
-> Maybe (ModuleName λ)
-> Maybe (s (ImportSpecification l l d d))
-> Import λ l d s
Import
   excludedImports :: forall (s :: * -> *) l (d :: * -> *).
[s (ImportItem l l d d)] -> ImportSpecification Language l d s
excludedImports = Bool
-> [s (ImportItem l l d d)] -> ImportSpecification Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Bool -> [s (ImportItem l l d d)] -> ImportSpecification λ l d s
ImportSpecification Bool
False
   includedImports :: forall (s :: * -> *) l (d :: * -> *).
[s (ImportItem l l d d)] -> ImportSpecification Language l d s
includedImports = Bool
-> [s (ImportItem l l d d)] -> ImportSpecification Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Bool -> [s (ImportItem l l d d)] -> ImportSpecification λ l d s
ImportSpecification Bool
True
   importClassOrType :: forall l (d :: * -> *) (s :: * -> *).
Name Language
-> Maybe (Members Language) -> ImportItem Language l d s
importClassOrType = Name Language
-> Maybe (Members Language) -> ImportItem Language l d s
Name Language
-> Maybe (Members Language) -> ImportItem Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Name λ -> Maybe (Members λ) -> ImportItem λ l d s
ImportClassOrType
   importVar :: forall l (d :: * -> *) (s :: * -> *).
Name Language -> ImportItem Language l d s
importVar = Name Language -> ImportItem Language l d s
Name Language -> ImportItem Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Name λ -> ImportItem λ l d s
ImportVar

   allMembers :: Members Language
allMembers = Members Language
Members Language
forall λ. Members λ
AllMembers
   memberList :: [Name Language] -> Members Language
memberList = [Name Language] -> Members Language
[Name Language] -> Members Language
forall λ. [Name λ] -> Members λ
MemberList

   classDeclaration :: forall (s :: * -> *) l (d :: * -> *).
s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
classDeclaration = s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration λ l d s
ClassDeclaration
   dataDeclaration :: forall (s :: * -> *) l (d :: * -> *).
s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (DataConstructor l l d d)]
-> [s (DerivingClause l l d d)]
-> Declaration Language l d s
dataDeclaration = s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (DataConstructor l l d d)]
-> [s (DerivingClause l l d d)]
-> Declaration Language l d s
s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (DataConstructor l l d d)]
-> [s (DerivingClause l l d d)]
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Context l l d d)
-> s (TypeLHS l l d d)
-> [s (DataConstructor l l d d)]
-> [s (DerivingClause l l d d)]
-> Declaration λ l d s
DataDeclaration
   defaultDeclaration :: forall (s :: * -> *) l (d :: * -> *).
[s (Type l l d d)] -> Declaration Language l d s
defaultDeclaration = [s (Type l l d d)] -> Declaration Language l d s
[s (Type l l d d)] -> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Type l l d d)] -> Declaration λ l d s
DefaultDeclaration
   equationDeclaration :: forall (s :: * -> *) l (d :: * -> *).
s (EquationLHS l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
equationDeclaration = s (EquationLHS l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
s (EquationLHS l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (EquationLHS l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration λ l d s
EquationDeclaration
   fixityDeclaration :: forall l (d :: * -> *) (s :: * -> *).
Associativity Language
-> Maybe Int
-> NonEmpty (Name Language)
-> Declaration Language l d s
fixityDeclaration = Associativity Language
-> Maybe Int
-> NonEmpty (Name Language)
-> Declaration Language l d s
Associativity Language
-> Maybe Int
-> NonEmpty (Name Language)
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Associativity λ
-> Maybe Int -> NonEmpty (Name λ) -> Declaration λ l d s
FixityDeclaration
   foreignExport :: forall (s :: * -> *) l (d :: * -> *).
CallingConvention Language
-> Maybe Text
-> Name Language
-> s (Type l l d d)
-> Declaration Language l d s
foreignExport = CallingConvention Language
-> Maybe Text
-> Name Language
-> s (Type l l d d)
-> Declaration Language l d s
CallingConvention Language
-> Maybe Text
-> Name Language
-> s (Type l l d d)
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
CallingConvention λ
-> Maybe Text -> Name λ -> s (Type l l d d) -> Declaration λ l d s
ForeignExport
   foreignImport :: forall (s :: * -> *) l (d :: * -> *).
CallingConvention Language
-> Maybe (CallSafety Language)
-> Maybe Text
-> Name Language
-> s (Type l l d d)
-> Declaration Language l d s
foreignImport = CallingConvention Language
-> Maybe (CallSafety Language)
-> Maybe Text
-> Name Language
-> s (Type l l d d)
-> Declaration Language l d s
CallingConvention Language
-> Maybe (CallSafety Language)
-> Maybe Text
-> Name Language
-> s (Type l l d d)
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
CallingConvention λ
-> Maybe (CallSafety λ)
-> Maybe Text
-> Name λ
-> s (Type l l d d)
-> Declaration λ l d s
ForeignImport
   instanceDeclaration :: forall (s :: * -> *) l (d :: * -> *).
s (Context l l d d)
-> s (ClassInstanceLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
instanceDeclaration = s (Context l l d d)
-> s (ClassInstanceLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
s (Context l l d d)
-> s (ClassInstanceLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Context l l d d)
-> s (ClassInstanceLHS l l d d)
-> [s (Declaration l l d d)]
-> Declaration λ l d s
InstanceDeclaration
   newtypeDeclaration :: forall (s :: * -> *) l (d :: * -> *).
s (Context l l d d)
-> s (TypeLHS l l d d)
-> s (DataConstructor l l d d)
-> [s (DerivingClause l l d d)]
-> Declaration Language l d s
newtypeDeclaration = s (Context l l d d)
-> s (TypeLHS l l d d)
-> s (DataConstructor l l d d)
-> [s (DerivingClause l l d d)]
-> Declaration Language l d s
s (Context l l d d)
-> s (TypeLHS l l d d)
-> s (DataConstructor l l d d)
-> [s (DerivingClause l l d d)]
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Context l l d d)
-> s (TypeLHS l l d d)
-> s (DataConstructor l l d d)
-> [s (DerivingClause l l d d)]
-> Declaration λ l d s
NewtypeDeclaration
   typeSynonymDeclaration :: forall (s :: * -> *) l (d :: * -> *).
s (TypeLHS l l d d)
-> s (Type l l d d) -> Declaration Language l d s
typeSynonymDeclaration = s (TypeLHS l l d d)
-> s (Type l l d d) -> Declaration Language l d s
s (TypeLHS l l d d)
-> s (Type l l d d) -> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (TypeLHS l l d d) -> s (Type l l d d) -> Declaration λ l d s
TypeSynonymDeclaration
   typeSignature :: forall (s :: * -> *) l (d :: * -> *).
NonEmpty (Name Language)
-> s (Context l l d d)
-> s (Type l l d d)
-> Declaration Language l d s
typeSignature = NonEmpty (Name Language)
-> s (Context l l d d)
-> s (Type l l d d)
-> Declaration Language l d s
NonEmpty (Name Language)
-> s (Context l l d d)
-> s (Type l l d d)
-> Declaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
NonEmpty (Name λ)
-> s (Context l l d d) -> s (Type l l d d) -> Declaration λ l d s
TypeSignature

   applyExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> s (Expression l l d d) -> Expression Language l d s
applyExpression = s (Expression l l d d)
-> s (Expression l l d d) -> Expression Language l d s
s (Expression l l d d)
-> s (Expression l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d)
-> s (Expression l l d d) -> Expression λ l d s
ApplyExpression
   conditionalExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression Language l d s
conditionalExpression = s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression Language l d s
s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression λ l d s
ConditionalExpression
   constructorExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Constructor l l d d) -> Expression Language l d s
constructorExpression = s (Constructor l l d d) -> Expression Language l d s
s (Constructor l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Constructor l l d d) -> Expression λ l d s
ConstructorExpression
   caseExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> [s (CaseAlternative l l d d)] -> Expression Language l d s
caseExpression = s (Expression l l d d)
-> [s (CaseAlternative l l d d)] -> Expression Language l d s
s (Expression l l d d)
-> [s (CaseAlternative l l d d)] -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d)
-> [s (CaseAlternative l l d d)] -> Expression λ l d s
CaseExpression
   doExpression :: forall (s :: * -> *) l (d :: * -> *).
s (GuardedExpression l l d d) -> Expression Language l d s
doExpression = s (GuardedExpression l l d d) -> Expression Language l d s
s (GuardedExpression l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (GuardedExpression l l d d) -> Expression λ l d s
DoExpression
   infixExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression Language l d s
infixExpression = s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression Language l d s
s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d)
-> s (Expression l l d d)
-> s (Expression l l d d)
-> Expression λ l d s
InfixExpression
   leftSectionExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> QualifiedName Language -> Expression Language l d s
leftSectionExpression = s (Expression l l d d)
-> QualifiedName Language -> Expression Language l d s
s (Expression l l d d)
-> QualifiedName Language -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d) -> QualifiedName λ -> Expression λ l d s
LeftSectionExpression
   lambdaExpression :: forall (s :: * -> *) l (d :: * -> *).
[s (Pattern l l d d)]
-> s (Expression l l d d) -> Expression Language l d s
lambdaExpression = [s (Pattern l l d d)]
-> s (Expression l l d d) -> Expression Language l d s
[s (Pattern l l d d)]
-> s (Expression l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Pattern l l d d)]
-> s (Expression l l d d) -> Expression λ l d s
LambdaExpression
   letExpression :: forall (s :: * -> *) l (d :: * -> *).
[s (Declaration l l d d)]
-> s (Expression l l d d) -> Expression Language l d s
letExpression = [s (Declaration l l d d)]
-> s (Expression l l d d) -> Expression Language l d s
[s (Declaration l l d d)]
-> s (Expression l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Declaration l l d d)]
-> s (Expression l l d d) -> Expression λ l d s
LetExpression
   listComprehension :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> NonEmpty (s (Statement l l d d)) -> Expression Language l d s
listComprehension = s (Expression l l d d)
-> NonEmpty (s (Statement l l d d)) -> Expression Language l d s
s (Expression l l d d)
-> NonEmpty (s (Statement l l d d)) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d)
-> NonEmpty (s (Statement l l d d)) -> Expression λ l d s
ListComprehension
   listExpression :: forall (s :: * -> *) l (d :: * -> *).
[s (Expression l l d d)] -> Expression Language l d s
listExpression = [s (Expression l l d d)] -> Expression Language l d s
[s (Expression l l d d)] -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Expression l l d d)] -> Expression λ l d s
ListExpression
   literalExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Value l l d d) -> Expression Language l d s
literalExpression = s (Value l l d d) -> Expression Language l d s
s (Value l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Value l l d d) -> Expression λ l d s
LiteralExpression
   negate :: forall l (d :: * -> *) (s :: * -> *). Expression Language l d s
negate = Expression Language l d s
Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Expression λ l d s
Negate
   recordExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> [s (FieldBinding l l d d)] -> Expression Language l d s
recordExpression = s (Expression l l d d)
-> [s (FieldBinding l l d d)] -> Expression Language l d s
s (Expression l l d d)
-> [s (FieldBinding l l d d)] -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d)
-> [s (FieldBinding l l d d)] -> Expression λ l d s
RecordExpression
   referenceExpression :: forall l (d :: * -> *).
QualifiedName Language -> Expression Language l d d
referenceExpression = QualifiedName Language -> Expression Language l d d
QualifiedName Language -> Expression Language l d d
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> Expression λ l d s
ReferenceExpression
   rightSectionExpression :: forall (s :: * -> *) l (d :: * -> *).
QualifiedName Language
-> s (Expression l l d d) -> Expression Language l d s
rightSectionExpression = QualifiedName Language
-> s (Expression l l d d) -> Expression Language l d s
QualifiedName Language
-> s (Expression l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> s (Expression l l d d) -> Expression λ l d s
RightSectionExpression
   sequenceExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> Maybe (s (Expression l l d d))
-> Maybe (s (Expression l l d d))
-> Expression Language l d s
sequenceExpression = s (Expression l l d d)
-> Maybe (s (Expression l l d d))
-> Maybe (s (Expression l l d d))
-> Expression Language l d s
s (Expression l l d d)
-> Maybe (s (Expression l l d d))
-> Maybe (s (Expression l l d d))
-> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d)
-> Maybe (s (Expression l l d d))
-> Maybe (s (Expression l l d d))
-> Expression λ l d s
SequenceExpression
   tupleExpression :: forall (s :: * -> *) l (d :: * -> *).
NonEmpty (s (Expression l l d d)) -> Expression Language l d s
tupleExpression = NonEmpty (s (Expression l l d d)) -> Expression Language l d s
NonEmpty (s (Expression l l d d)) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
NonEmpty (s (Expression l l d d)) -> Expression λ l d s
TupleExpression
   typedExpression :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d)
-> s (Type l l d d) -> Expression Language l d s
typedExpression = s (Expression l l d d)
-> s (Type l l d d) -> Expression Language l d s
s (Expression l l d d)
-> s (Type l l d d) -> Expression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d) -> s (Type l l d d) -> Expression λ l d s
TypedExpression

   asPattern :: forall (s :: * -> *) l (d :: * -> *).
Name Language -> s (Pattern l l d d) -> Pattern Language l d s
asPattern = Name Language -> s (Pattern l l d d) -> Pattern Language l d s
Name Language -> s (Pattern l l d d) -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Name λ -> s (Pattern l l d d) -> Pattern λ l d s
AsPattern
   constructorPattern :: forall (s :: * -> *) l (d :: * -> *).
s (Constructor l l d d)
-> [s (Pattern l l d d)] -> Pattern Language l d s
constructorPattern = s (Constructor l l d d)
-> [s (Pattern l l d d)] -> Pattern Language l d s
s (Constructor l l d d)
-> [s (Pattern l l d d)] -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Constructor l l d d) -> [s (Pattern l l d d)] -> Pattern λ l d s
ConstructorPattern
   infixPattern :: forall (s :: * -> *) l (d :: * -> *).
s (Pattern l l d d)
-> QualifiedName Language
-> s (Pattern l l d d)
-> Pattern Language l d s
infixPattern = s (Pattern l l d d)
-> QualifiedName Language
-> s (Pattern l l d d)
-> Pattern Language l d s
s (Pattern l l d d)
-> QualifiedName Language
-> s (Pattern l l d d)
-> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Pattern l l d d)
-> QualifiedName λ -> s (Pattern l l d d) -> Pattern λ l d s
InfixPattern
   irrefutablePattern :: forall (s :: * -> *) l (d :: * -> *).
s (Pattern l l d d) -> Pattern Language l d s
irrefutablePattern = s (Pattern l l d d) -> Pattern Language l d s
s (Pattern l l d d) -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Pattern l l d d) -> Pattern λ l d s
IrrefutablePattern
   listPattern :: forall (s :: * -> *) l (d :: * -> *).
[s (Pattern l l d d)] -> Pattern Language l d s
listPattern = [s (Pattern l l d d)] -> Pattern Language l d s
[s (Pattern l l d d)] -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Pattern l l d d)] -> Pattern λ l d s
ListPattern
   literalPattern :: forall (s :: * -> *) l (d :: * -> *).
s (Value l l d d) -> Pattern Language l d s
literalPattern = s (Value l l d d) -> Pattern Language l d s
s (Value l l d d) -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Value l l d d) -> Pattern λ l d s
LiteralPattern
   recordPattern :: forall (s :: * -> *) l (d :: * -> *).
QualifiedName Language
-> [s (FieldPattern l l d d)] -> Pattern Language l d s
recordPattern = QualifiedName Language
-> [s (FieldPattern l l d d)] -> Pattern Language l d s
QualifiedName Language
-> [s (FieldPattern l l d d)] -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> [s (FieldPattern l l d d)] -> Pattern λ l d s
RecordPattern
   tuplePattern :: forall (s :: * -> *) l (d :: * -> *).
NonEmpty (s (Pattern l l d d)) -> Pattern Language l d s
tuplePattern = NonEmpty (s (Pattern l l d d)) -> Pattern Language l d s
NonEmpty (s (Pattern l l d d)) -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
NonEmpty (s (Pattern l l d d)) -> Pattern λ l d s
TuplePattern
   variablePattern :: forall l (d :: * -> *) (s :: * -> *).
Name Language -> Pattern Language l d s
variablePattern = Name Language -> Pattern Language l d s
Name Language -> Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Name λ -> Pattern λ l d s
VariablePattern
   wildcardPattern :: forall l (d :: * -> *) (s :: * -> *). Pattern Language l d s
wildcardPattern = Pattern Language l d s
Pattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Pattern λ l d s
WildcardPattern

   constructorType :: forall (s :: * -> *) l (d :: * -> *).
s (Constructor l l d d) -> Type Language l d s
constructorType = s (Constructor l l d d) -> Type Language l d s
s (Constructor l l d d) -> Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Constructor l l d d) -> Type λ l d s
ConstructorType
   functionConstructorType :: forall l (d :: * -> *) (s :: * -> *). Type Language l d s
functionConstructorType = Type Language l d s
Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Type λ l d s
FunctionConstructorType
   functionType :: forall (s :: * -> *) l (d :: * -> *).
s (Type l l d d) -> s (Type l l d d) -> Type Language l d s
functionType = s (Type l l d d) -> s (Type l l d d) -> Type Language l d s
s (Type l l d d) -> s (Type l l d d) -> Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Type l l d d) -> s (Type l l d d) -> Type λ l d s
FunctionType
   listType :: forall (s :: * -> *) l (d :: * -> *).
s (Type l l d d) -> Type Language l d s
listType = s (Type l l d d) -> Type Language l d s
s (Type l l d d) -> Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Type l l d d) -> Type λ l d s
ListType
   strictType :: forall (s :: * -> *) l (d :: * -> *).
s (Type l l d d) -> Type Language l d s
strictType = s (Type l l d d) -> Type Language l d s
s (Type l l d d) -> Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Type l l d d) -> Type λ l d s
StrictType
   tupleType :: forall (s :: * -> *) l (d :: * -> *).
NonEmpty (s (Type l l d d)) -> Type Language l d s
tupleType = NonEmpty (s (Type l l d d)) -> Type Language l d s
NonEmpty (s (Type l l d d)) -> Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
NonEmpty (s (Type l l d d)) -> Type λ l d s
TupleType
   typeApplication :: forall (s :: * -> *) l (d :: * -> *).
s (Type l l d d) -> s (Type l l d d) -> Type Language l d s
typeApplication = s (Type l l d d) -> s (Type l l d d) -> Type Language l d s
s (Type l l d d) -> s (Type l l d d) -> Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Type l l d d) -> s (Type l l d d) -> Type λ l d s
TypeApplication
   typeVariable :: forall l (d :: * -> *) (s :: * -> *).
Name Language -> Type Language l d s
typeVariable = Name Language -> Type Language l d s
Name Language -> Type Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Name λ -> Type λ l d s
TypeVariable

   constructorReference :: forall l (d :: * -> *) (s :: * -> *).
QualifiedName Language -> Constructor Language l d s
constructorReference = QualifiedName Language -> Constructor Language l d s
QualifiedName Language -> Constructor Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> Constructor λ l d s
ConstructorReference
   emptyListConstructor :: forall l (d :: * -> *) (s :: * -> *). Constructor Language l d s
emptyListConstructor = Constructor Language l d s
Constructor Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Constructor λ l d s
EmptyListConstructor
   tupleConstructor :: forall l (d :: * -> *) (s :: * -> *).
Int -> Constructor Language l d s
tupleConstructor = Int -> Constructor Language l d s
Int -> Constructor Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Int -> Constructor λ l d s
TupleConstructor
   unitConstructor :: forall l (d :: * -> *) (s :: * -> *). Constructor Language l d s
unitConstructor = Constructor Language l d s
Constructor Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Constructor λ l d s
UnitConstructor

   constructor :: forall (s :: * -> *) l (d :: * -> *).
Name Language
-> [s (Type l l d d)] -> DataConstructor Language l d s
constructor = Name Language
-> [s (Type l l d d)] -> DataConstructor Language l d s
Name Language
-> [s (Type l l d d)] -> DataConstructor Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Name λ -> [s (Type l l d d)] -> DataConstructor λ l d s
Constructor
   recordConstructor :: forall (s :: * -> *) l (d :: * -> *).
Name Language
-> [s (FieldDeclaration l l d d)] -> DataConstructor Language l d s
recordConstructor = Name Language
-> [s (FieldDeclaration l l d d)] -> DataConstructor Language l d s
Name Language
-> [s (FieldDeclaration l l d d)] -> DataConstructor Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Name λ -> [s (FieldDeclaration l l d d)] -> DataConstructor λ l d s
RecordConstructor
   constructorFields :: forall (s :: * -> *) l (d :: * -> *).
NonEmpty (Name Language)
-> s (Type l l d d) -> FieldDeclaration Language l d s
constructorFields = NonEmpty (Name Language)
-> s (Type l l d d) -> FieldDeclaration Language l d s
NonEmpty (Name Language)
-> s (Type l l d d) -> FieldDeclaration Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
NonEmpty (Name λ) -> s (Type l l d d) -> FieldDeclaration λ l d s
ConstructorFields

   fieldBinding :: forall (s :: * -> *) l (d :: * -> *).
QualifiedName Language
-> s (Expression l l d d) -> FieldBinding Language l d s
fieldBinding = QualifiedName Language
-> s (Expression l l d d) -> FieldBinding Language l d s
QualifiedName Language
-> s (Expression l l d d) -> FieldBinding Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> s (Expression l l d d) -> FieldBinding λ l d s
FieldBinding
   fieldPattern :: forall (s :: * -> *) l (d :: * -> *).
QualifiedName Language
-> s (Pattern l l d d) -> FieldPattern Language l d s
fieldPattern = QualifiedName Language
-> s (Pattern l l d d) -> FieldPattern Language l d s
QualifiedName Language
-> s (Pattern l l d d) -> FieldPattern Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> s (Pattern l l d d) -> FieldPattern λ l d s
FieldPattern

   simpleDerive :: forall l (d :: * -> *) (s :: * -> *).
QualifiedName Language -> DerivingClause Language l d s
simpleDerive = QualifiedName Language -> DerivingClause Language l d s
QualifiedName Language -> DerivingClause Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> DerivingClause λ l d s
SimpleDerive

   typeClassInstanceLHS :: forall (s :: * -> *) l (d :: * -> *).
QualifiedName Language
-> s (Type l l d d) -> ClassInstanceLHS Language l d s
typeClassInstanceLHS = QualifiedName Language
-> s (Type l l d d) -> ClassInstanceLHS Language l d s
QualifiedName Language
-> s (Type l l d d) -> ClassInstanceLHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> s (Type l l d d) -> ClassInstanceLHS λ l d s
TypeClassInstanceLHS
   simpleTypeLHS :: forall l (d :: * -> *) (s :: * -> *).
Name Language -> [Name Language] -> TypeLHS Language l d s
simpleTypeLHS = Name Language -> [Name Language] -> TypeLHS Language l d s
Name Language -> [Name Language] -> TypeLHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Name λ -> [Name λ] -> TypeLHS λ l d s
SimpleTypeLHS

   prefixLHS :: forall (s :: * -> *) l (d :: * -> *).
s (EquationLHS l l d d)
-> NonEmpty (s (Pattern l l d d)) -> EquationLHS Language l d s
prefixLHS = s (EquationLHS l l d d)
-> NonEmpty (s (Pattern l l d d)) -> EquationLHS Language l d s
s (EquationLHS l l d d)
-> NonEmpty (s (Pattern l l d d)) -> EquationLHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (EquationLHS l l d d)
-> NonEmpty (s (Pattern l l d d)) -> EquationLHS λ l d s
PrefixLHS
   infixLHS :: forall (s :: * -> *) l (d :: * -> *).
s (Pattern l l d d)
-> Name Language
-> s (Pattern l l d d)
-> EquationLHS Language l d s
infixLHS = s (Pattern l l d d)
-> Name Language
-> s (Pattern l l d d)
-> EquationLHS Language l d s
s (Pattern l l d d)
-> Name Language
-> s (Pattern l l d d)
-> EquationLHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Pattern l l d d)
-> Name λ -> s (Pattern l l d d) -> EquationLHS λ l d s
InfixLHS
   patternLHS :: forall (s :: * -> *) l (d :: * -> *).
s (Pattern l l d d) -> EquationLHS Language l d s
patternLHS = s (Pattern l l d d) -> EquationLHS Language l d s
s (Pattern l l d d) -> EquationLHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Pattern l l d d) -> EquationLHS λ l d s
PatternLHS
   variableLHS :: forall l (d :: * -> *) (s :: * -> *).
Name Language -> EquationLHS Language l d s
variableLHS = Name Language -> EquationLHS Language l d s
Name Language -> EquationLHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
Name λ -> EquationLHS λ l d s
VariableLHS

   caseAlternative :: forall (s :: * -> *) l (d :: * -> *).
s (Pattern l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> CaseAlternative Language l d s
caseAlternative = s (Pattern l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> CaseAlternative Language l d s
s (Pattern l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> CaseAlternative Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Pattern l l d d)
-> s (EquationRHS l l d d)
-> [s (Declaration l l d d)]
-> CaseAlternative λ l d s
CaseAlternative

   guardedRHS :: forall (s :: * -> *) l (d :: * -> *).
NonEmpty (s (GuardedExpression l l d d))
-> EquationRHS Language l d s
guardedRHS = NonEmpty (s (GuardedExpression l l d d))
-> EquationRHS Language l d s
NonEmpty (s (GuardedExpression l l d d))
-> EquationRHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
NonEmpty (s (GuardedExpression l l d d)) -> EquationRHS λ l d s
GuardedRHS
   normalRHS :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d) -> EquationRHS Language l d s
normalRHS = s (Expression l l d d) -> EquationRHS Language l d s
s (Expression l l d d) -> EquationRHS Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d) -> EquationRHS λ l d s
NormalRHS

   guardedExpression :: forall (s :: * -> *) l (d :: * -> *).
[s (Statement l l d d)]
-> s (Expression l l d d) -> GuardedExpression Language l d s
guardedExpression = [s (Statement l l d d)]
-> s (Expression l l d d) -> GuardedExpression Language l d s
[s (Statement l l d d)]
-> s (Expression l l d d) -> GuardedExpression Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Statement l l d d)]
-> s (Expression l l d d) -> GuardedExpression λ l d s
GuardedExpression

   classConstraint :: forall (s :: * -> *) l (d :: * -> *).
QualifiedName Language
-> s (Type l l d d) -> Context Language l d s
classConstraint = QualifiedName Language
-> s (Type l l d d) -> Context Language l d s
QualifiedName Language
-> s (Type l l d d) -> Context Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
QualifiedName λ -> s (Type l l d d) -> Context λ l d s
ClassConstraint
   constraints :: forall (s :: * -> *) l (d :: * -> *).
[s (Context l l d d)] -> Context Language l d s
constraints = [s (Context l l d d)] -> Context Language l d s
[s (Context l l d d)] -> Context Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Context l l d d)] -> Context λ l d s
Constraints
   noContext :: forall l (d :: * -> *) (s :: * -> *). Context Language l d s
noContext = Context Language l d s
Context Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Context λ l d s
NoContext

   bindStatement :: forall (s :: * -> *) l (d :: * -> *).
s (Pattern l l d d)
-> s (Expression l l d d) -> Statement Language l d s
bindStatement = s (Pattern l l d d)
-> s (Expression l l d d) -> Statement Language l d s
s (Pattern l l d d)
-> s (Expression l l d d) -> Statement Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Pattern l l d d) -> s (Expression l l d d) -> Statement λ l d s
BindStatement
   expressionStatement :: forall (s :: * -> *) l (d :: * -> *).
s (Expression l l d d) -> Statement Language l d s
expressionStatement = s (Expression l l d d) -> Statement Language l d s
s (Expression l l d d) -> Statement Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
s (Expression l l d d) -> Statement λ l d s
ExpressionStatement
   letStatement :: forall (s :: * -> *) l (d :: * -> *).
[s (Declaration l l d d)] -> Statement Language l d s
letStatement = [s (Declaration l l d d)] -> Statement Language l d s
[s (Declaration l l d d)] -> Statement Language l d s
forall λ l (d :: * -> *) (s :: * -> *).
[s (Declaration l l d d)] -> Statement λ l d s
LetStatement

   charLiteral :: forall l (d :: * -> *) (s :: * -> *). Char -> Value Language l d s
charLiteral = Char -> Value Language l d s
Char -> Value Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Char -> Value λ l d s
CharLiteral
   floatingLiteral :: forall l (d :: * -> *) (s :: * -> *).
Rational -> Value Language l d s
floatingLiteral = Rational -> Value Language l d s
Rational -> Value Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Rational -> Value λ l d s
FloatingLiteral
   integerLiteral :: forall l (d :: * -> *) (s :: * -> *).
Integer -> Value Language l d s
integerLiteral = Integer -> Value Language l d s
Integer -> Value Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Integer -> Value λ l d s
IntegerLiteral
   stringLiteral :: forall l (d :: * -> *) (s :: * -> *). Text -> Value Language l d s
stringLiteral = Text -> Value Language l d s
Text -> Value Language l d s
forall λ l (d :: * -> *) (s :: * -> *). Text -> Value λ l d s
StringLiteral

   name :: Text -> Name Language
name = Text -> Name Language
Text -> Name Language
forall λ. Text -> Name λ
Name
   moduleName :: NonEmpty (Name Language) -> ModuleName Language
moduleName = NonEmpty (Name Language) -> ModuleName Language
NonEmpty (Name Language) -> ModuleName Language
forall λ. NonEmpty (Name λ) -> ModuleName λ
ModuleName
   qualifiedName :: Maybe (ModuleName Language)
-> Name Language -> QualifiedName Language
qualifiedName = Maybe (ModuleName Language)
-> Name Language -> QualifiedName Language
Maybe (ModuleName Language)
-> Name Language -> QualifiedName Language
forall λ. Maybe (ModuleName λ) -> Name λ -> QualifiedName λ
QualifiedName

   nonAssociative :: Associativity Language
nonAssociative = Associativity Language
Associativity Language
forall λ. Associativity λ
NonAssociative
   leftAssociative :: Associativity Language
leftAssociative = Associativity Language
Associativity Language
forall λ. Associativity λ
LeftAssociative
   rightAssociative :: Associativity Language
rightAssociative = Associativity Language
Associativity Language
forall λ. Associativity λ
RightAssociative

   cCall :: CallingConvention Language
cCall = CallingConvention Language
CallingConvention Language
forall λ. CallingConvention λ
CCall
   cppCall :: CallingConvention Language
cppCall = CallingConvention Language
CallingConvention Language
forall λ. CallingConvention λ
CppCall
   dotNetCall :: CallingConvention Language
dotNetCall = CallingConvention Language
CallingConvention Language
forall λ. CallingConvention λ
DotNetCall
   jvmCall :: CallingConvention Language
jvmCall = CallingConvention Language
CallingConvention Language
forall λ. CallingConvention λ
JvmCall
   stdCall :: CallingConvention Language
stdCall = CallingConvention Language
CallingConvention Language
forall λ. CallingConvention λ
StdCall

   safeCall :: CallSafety Language
safeCall = CallSafety Language
CallSafety Language
forall λ. CallSafety λ
SafeCall
   unsafeCall :: CallSafety Language
unsafeCall = CallSafety Language
CallSafety Language
forall λ. CallSafety λ
UnsafeCall

data Module λ l d s =
   NamedModule (Abstract.ModuleName λ) (Maybe [s (Abstract.Export l l d d)]) [s (Abstract.Import l l d d)]
               [s (Abstract.Declaration l l d d)]
   | AnonymousModule [s (Abstract.Import l l d d)] [s (Abstract.Declaration l l d d)]
   | ExtendedModule [ExtensionSwitch] (s (Abstract.Module l l d d))

data Declaration λ l d s =
   ClassDeclaration (s (Abstract.Context l l d d)) (s (Abstract.TypeLHS l l d d)) [s (Abstract.Declaration l l d d)]
   | DataDeclaration (s (Abstract.Context l l d d)) (s (Abstract.TypeLHS l l d d))
                     [s (Abstract.DataConstructor l l d d)] [s (Abstract.DerivingClause l l d d)]
   | DefaultDeclaration [s (Abstract.Type l l d d)]
   | EquationDeclaration (s (Abstract.EquationLHS l l d d)) (s (Abstract.EquationRHS l l d d))
                         [s (Abstract.Declaration l l d d)]
   | FixityDeclaration (Associativity λ) (Maybe Int) (NonEmpty (Abstract.Name λ))
   | ForeignExport (CallingConvention λ) (Maybe Text) (Abstract.Name λ) (s (Abstract.Type l l d d))
   | ForeignImport (CallingConvention λ) (Maybe (CallSafety λ)) (Maybe Text) (Abstract.Name λ)
                   (s (Abstract.Type l l d d))
   | InstanceDeclaration (s (Abstract.Context l l d d)) (s (Abstract.ClassInstanceLHS l l d d))
                         ([s (Abstract.Declaration l l d d)])
   | NewtypeDeclaration (s (Abstract.Context l l d d)) (s (Abstract.TypeLHS l l d d))
                        (s (Abstract.DataConstructor l l d d)) [s (Abstract.DerivingClause l l d d)]
   | TypeSynonymDeclaration (s (Abstract.TypeLHS l l d d)) (s (Abstract.Type l l d d))
   | TypeSignature (NonEmpty (Abstract.Name λ)) (s (Abstract.Context l l d d)) (s (Abstract.Type l l d d))

data Expression λ l d s =
   ApplyExpression (s (Abstract.Expression l l d d)) (s (Abstract.Expression l l d d))
   | ConditionalExpression (s (Abstract.Expression l l d d)) (s (Abstract.Expression l l d d))
                           (s (Abstract.Expression l l d d))
   | ConstructorExpression (s (Abstract.Constructor l l d d))
   | CaseExpression (s (Abstract.Expression l l d d)) [s (Abstract.CaseAlternative l l d d)]
   | DoExpression (s (Abstract.GuardedExpression l l d d))
   | InfixExpression (s (Abstract.Expression l l d d)) (s (Abstract.Expression l l d d))
                     (s (Abstract.Expression l l d d))
   | LeftSectionExpression (s (Abstract.Expression l l d d)) (Abstract.QualifiedName λ)
   | LambdaExpression [s (Abstract.Pattern l l d d)] (s (Abstract.Expression l l d d))
   | LetExpression [s (Abstract.Declaration l l d d)] (s (Abstract.Expression l l d d))
   | ListComprehension (s (Abstract.Expression l l d d)) (NonEmpty (s (Abstract.Statement l l d d)))
   | ListExpression [s (Abstract.Expression l l d d)]
   | LiteralExpression (s (Abstract.Value l l d d))
   | Negate
   | RecordExpression (s (Abstract.Expression l l d d)) [s (Abstract.FieldBinding l l d d)]
   | ReferenceExpression (Abstract.QualifiedName λ)
   | RightSectionExpression (Abstract.QualifiedName λ) (s (Abstract.Expression l l d d))
   | SequenceExpression (s (Abstract.Expression l l d d)) (Maybe (s (Abstract.Expression l l d d)))
                        (Maybe (s (Abstract.Expression l l d d)))
   | TupleExpression (NonEmpty (s (Abstract.Expression l l d d)))
   | TypedExpression (s (Abstract.Expression l l d d)) (s (Abstract.Type l l d d))

data Type λ l d s =
   ConstructorType (s (Abstract.Constructor l l d d))
   | FunctionConstructorType
   | FunctionType (s (Abstract.Type l l d d)) (s (Abstract.Type l l d d))
   | ListType (s (Abstract.Type l l d d))
   | StrictType (s (Abstract.Type l l d d))
   | TupleType (NonEmpty (s (Abstract.Type l l d d)))
   | TypeApplication (s (Abstract.Type l l d d)) (s (Abstract.Type l l d d))
   | TypeVariable (Abstract.Name λ)

data EquationLHS λ l d s =
   PrefixLHS (s (Abstract.EquationLHS l l d d)) (NonEmpty (s (Abstract.Pattern l l d d)))
   | InfixLHS (s (Abstract.Pattern l l d d)) (Abstract.Name λ) (s (Abstract.Pattern l l d d))
   | PatternLHS (s (Abstract.Pattern l l d d))
   | VariableLHS (Abstract.Name λ)

data EquationRHS λ l d s =
   GuardedRHS (NonEmpty (s (Abstract.GuardedExpression l l d d)))
   | NormalRHS (s (Abstract.Expression l l d d))

data GuardedExpression λ l d s = GuardedExpression [s (Abstract.Statement l l d d)] (s (Abstract.Expression  l l d d))

data Pattern λ l d s =
   AsPattern (Abstract.Name λ) (s (Abstract.Pattern l l d d))
   | ConstructorPattern (s (Abstract.Constructor l l d d)) [s (Abstract.Pattern l l d d)]
   | InfixPattern (s (Abstract.Pattern l l d d)) (Abstract.QualifiedName λ) (s (Abstract.Pattern l l d d))
   | IrrefutablePattern (s (Abstract.Pattern l l d d))
   | ListPattern [s (Abstract.Pattern l l d d)]
   | LiteralPattern (s (Abstract.Value l l d d))
   | RecordPattern (Abstract.QualifiedName λ) [s (Abstract.FieldPattern l l d d)]
   | TuplePattern (NonEmpty (s (Abstract.Pattern l l d d)))
   | VariablePattern (Abstract.Name λ)
   | WildcardPattern

data Statement λ l d s =
   BindStatement (s (Abstract.Pattern l l d d)) (s (Abstract.Expression l l d d))
   | ExpressionStatement (s (Abstract.Expression l l d d))
   | LetStatement [s (Abstract.Declaration l l d d)]

data ClassInstanceLHS λ l d s =
   TypeClassInstanceLHS (Abstract.QualifiedName λ) (s (Abstract.Type l l d d))

data TypeLHS λ l (d :: Kind.Type -> Kind.Type) (s :: Kind.Type -> Kind.Type) =
   SimpleTypeLHS (Abstract.Name λ) [Abstract.Name λ]

data Import λ l d s = Import Bool (Abstract.ModuleName λ) (Maybe (Abstract.ModuleName λ))
                             (Maybe (s (Abstract.ImportSpecification l l d d)))

data ImportSpecification λ l d s = ImportSpecification Bool [s (Abstract.ImportItem l l d d)]

data ImportItem λ l (d :: Kind.Type -> Kind.Type) (s :: Kind.Type -> Kind.Type) =
   ImportClassOrType (Abstract.Name λ) (Maybe (Abstract.Members λ))
   | ImportVar (Abstract.Name λ)

data Export λ l (d :: Kind.Type -> Kind.Type) (s :: Kind.Type -> Kind.Type) =
   ExportClassOrType (Abstract.QualifiedName λ) (Maybe (Abstract.Members λ))
   | ExportVar (Abstract.QualifiedName λ)
   | ReExportModule (Abstract.ModuleName λ)

data Context λ l d s =
   ClassConstraint (Abstract.QualifiedName λ) (s (Abstract.Type l l d d))
   | Constraints [s (Abstract.Context l l d d)]
   | NoContext

data DataConstructor λ l d s =
   Constructor (Abstract.Name λ) [s (Abstract.Type l l d d)]
   | RecordConstructor (Abstract.Name λ) [s (Abstract.FieldDeclaration l l d d)]

data DerivingClause λ l (d :: Kind.Type -> Kind.Type) (s :: Kind.Type -> Kind.Type) = SimpleDerive (Abstract.QualifiedName λ)

data FieldDeclaration λ l d s = ConstructorFields (NonEmpty (Abstract.Name λ)) (s (Abstract.Type l l d d))
data FieldBinding λ l d s = FieldBinding (Abstract.QualifiedName λ) (s (Abstract.Expression l l d d))
data FieldPattern λ l d s = FieldPattern (Abstract.QualifiedName λ) (s (Abstract.Pattern l l d d))

data CaseAlternative λ l d s =
   CaseAlternative (s (Abstract.Pattern l l d d)) (s (Abstract.EquationRHS l l d d)) [s (Abstract.Declaration l l d d)]

data Constructor λ l (d :: Kind.Type -> Kind.Type) (s :: Kind.Type -> Kind.Type) =
   ConstructorReference (Abstract.QualifiedName λ)
   | EmptyListConstructor
   | TupleConstructor Int
   | UnitConstructor

data Value λ l (d :: Kind.Type -> Kind.Type) (s :: Kind.Type -> Kind.Type) =
   CharLiteral Char
   | FloatingLiteral Rational
   | IntegerLiteral Integer
   | StringLiteral Text
   deriving (Typeable (Value λ l d s)
Typeable (Value λ l d s) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> Value λ l d s -> c (Value λ l d s))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (Value λ l d s))
-> (Value λ l d s -> Constr)
-> (Value λ l d s -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (Value λ l d s)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (Value λ l d s)))
-> ((forall b. Data b => b -> b) -> Value λ l d s -> Value λ l d s)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r)
-> (forall u. (forall d. Data d => d -> u) -> Value λ l d s -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> Value λ l d s -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> Value λ l d s -> m (Value λ l d s))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> Value λ l d s -> m (Value λ l d s))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> Value λ l d s -> m (Value λ l d s))
-> Data (Value λ l d s)
Value λ l d s -> Constr
Value λ l d s -> DataType
(forall b. Data b => b -> b) -> Value λ l d s -> Value λ l d s
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Value λ l d s -> u
forall u. (forall d. Data d => d -> u) -> Value λ l d s -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
forall λ l (d :: * -> *) (s :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
Typeable (Value λ l d s)
forall λ l (d :: * -> *) (s :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
Value λ l d s -> Constr
forall λ l (d :: * -> *) (s :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
Value λ l d s -> DataType
forall λ l (d :: * -> *) (s :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall b. Data b => b -> b) -> Value λ l d s -> Value λ l d s
forall λ l (d :: * -> *) (s :: * -> *) u.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
Int -> (forall d. Data d => d -> u) -> Value λ l d s -> u
forall λ l (d :: * -> *) (s :: * -> *) u.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall d. Data d => d -> u) -> Value λ l d s -> [u]
forall λ l (d :: * -> *) (s :: * -> *) r r'.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
forall λ l (d :: * -> *) (s :: * -> *) r r'.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
forall λ l (d :: * -> *) (s :: * -> *) (m :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, Monad m) =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
forall λ l (d :: * -> *) (s :: * -> *) (m :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
forall λ l (d :: * -> *) (s :: * -> *) (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Value λ l d s)
forall λ l (d :: * -> *) (s :: * -> *) (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Value λ l d s -> c (Value λ l d s)
forall λ l (d :: * -> *) (s :: * -> *) (t :: * -> *) (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Value λ l d s))
forall λ l (d :: * -> *) (s :: * -> *) (t :: * -> * -> *)
       (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Value λ l d s))
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Value λ l d s)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Value λ l d s -> c (Value λ l d s)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Value λ l d s))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Value λ l d s))
$cgfoldl :: forall λ l (d :: * -> *) (s :: * -> *) (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Value λ l d s -> c (Value λ l d s)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Value λ l d s -> c (Value λ l d s)
$cgunfold :: forall λ l (d :: * -> *) (s :: * -> *) (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Value λ l d s)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Value λ l d s)
$ctoConstr :: forall λ l (d :: * -> *) (s :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
Value λ l d s -> Constr
toConstr :: Value λ l d s -> Constr
$cdataTypeOf :: forall λ l (d :: * -> *) (s :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
Value λ l d s -> DataType
dataTypeOf :: Value λ l d s -> DataType
$cdataCast1 :: forall λ l (d :: * -> *) (s :: * -> *) (t :: * -> *) (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Value λ l d s))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Value λ l d s))
$cdataCast2 :: forall λ l (d :: * -> *) (s :: * -> *) (t :: * -> * -> *)
       (c :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Value λ l d s))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Value λ l d s))
$cgmapT :: forall λ l (d :: * -> *) (s :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall b. Data b => b -> b) -> Value λ l d s -> Value λ l d s
gmapT :: (forall b. Data b => b -> b) -> Value λ l d s -> Value λ l d s
$cgmapQl :: forall λ l (d :: * -> *) (s :: * -> *) r r'.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
$cgmapQr :: forall λ l (d :: * -> *) (s :: * -> *) r r'.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Value λ l d s -> r
$cgmapQ :: forall λ l (d :: * -> *) (s :: * -> *) u.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
(forall d. Data d => d -> u) -> Value λ l d s -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Value λ l d s -> [u]
$cgmapQi :: forall λ l (d :: * -> *) (s :: * -> *) u.
(Typeable d, Typeable s, Typeable λ, Typeable l) =>
Int -> (forall d. Data d => d -> u) -> Value λ l d s -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Value λ l d s -> u
$cgmapM :: forall λ l (d :: * -> *) (s :: * -> *) (m :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, Monad m) =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
$cgmapMp :: forall λ l (d :: * -> *) (s :: * -> *) (m :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
$cgmapMo :: forall λ l (d :: * -> *) (s :: * -> *) (m :: * -> *).
(Typeable d, Typeable s, Typeable λ, Typeable l, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> Value λ l d s -> m (Value λ l d s)
Data, Value λ l d s -> Value λ l d s -> Bool
(Value λ l d s -> Value λ l d s -> Bool)
-> (Value λ l d s -> Value λ l d s -> Bool) -> Eq (Value λ l d s)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall λ l (d :: * -> *) (s :: * -> *).
Value λ l d s -> Value λ l d s -> Bool
$c== :: forall λ l (d :: * -> *) (s :: * -> *).
Value λ l d s -> Value λ l d s -> Bool
== :: Value λ l d s -> Value λ l d s -> Bool
$c/= :: forall λ l (d :: * -> *) (s :: * -> *).
Value λ l d s -> Value λ l d s -> Bool
/= :: Value λ l d s -> Value λ l d s -> Bool
Eq, Int -> Value λ l d s -> ShowS
[Value λ l d s] -> ShowS
Value λ l d s -> String
(Int -> Value λ l d s -> ShowS)
-> (Value λ l d s -> String)
-> ([Value λ l d s] -> ShowS)
-> Show (Value λ l d s)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall λ l (d :: * -> *) (s :: * -> *).
Int -> Value λ l d s -> ShowS
forall λ l (d :: * -> *) (s :: * -> *). [Value λ l d s] -> ShowS
forall λ l (d :: * -> *) (s :: * -> *). Value λ l d s -> String
$cshowsPrec :: forall λ l (d :: * -> *) (s :: * -> *).
Int -> Value λ l d s -> ShowS
showsPrec :: Int -> Value λ l d s -> ShowS
$cshow :: forall λ l (d :: * -> *) (s :: * -> *). Value λ l d s -> String
show :: Value λ l d s -> String
$cshowList :: forall λ l (d :: * -> *) (s :: * -> *). [Value λ l d s] -> ShowS
showList :: [Value λ l d s] -> ShowS
Show)

deriving instance Typeable (Module λ l d s)
deriving instance (Data (s (Abstract.Module l l d d)), Data (s (Abstract.Declaration l l d d)),
                   Data (s (Abstract.Export l l d d)), Data (s (Abstract.Import l l d d)),
                   Data (Abstract.ModuleName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Module λ l d s)
deriving instance (Show (s (Abstract.Module l l d d)), Show (s (Abstract.Declaration l l d d)),
                   Show (s (Abstract.Export l l d d)), Show (s (Abstract.Import l l d d)),
                   Show (Abstract.ModuleName λ)) => Show (Module λ l d s)
deriving instance (Eq (s (Abstract.Module l l d d)), Eq (s (Abstract.Declaration l l d d)),
                   Eq (s (Abstract.Export l l d d)), Eq (s (Abstract.Import l l d d)),
                   Eq (Abstract.ModuleName λ)) => Eq (Module λ l d s)

deriving instance Typeable (Declaration λ l d s)
deriving instance (Data (s (Abstract.Context l l d d)), Data (s (Abstract.DataConstructor l l d d)),
                   Data (s (Abstract.Declaration l l d d)), Data (s (Abstract.DerivingClause l l d d)),
                   Data (s (Abstract.EquationLHS l l d d)), Data (s (Abstract.EquationRHS l l d d)),
                   Data (s (Abstract.Type l l d d)), Data (s (Abstract.TypeLHS l l d d)),
                   Data (s (Abstract.ClassInstanceLHS l l d d)),
                   Data (Abstract.Name λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Declaration λ l d s)
deriving instance (Show (s (Abstract.Context l l d d)), Show (s (Abstract.DataConstructor l l d d)),
                   Show (s (Abstract.Declaration l l d d)), Show (s (Abstract.DerivingClause l l d d)),
                   Show (s (Abstract.EquationLHS l l d d)), Show (s (Abstract.EquationRHS l l d d)),
                   Show (s (Abstract.Type l l d d)), Show (s (Abstract.TypeLHS l l d d)),
                   Show (s (Abstract.ClassInstanceLHS l l d d)),
                   Show (Abstract.Name λ)) => Show (Declaration λ l d s)
deriving instance (Eq (s (Abstract.Context l l d d)), Eq (s (Abstract.DataConstructor l l d d)),
                   Eq (s (Abstract.Declaration l l d d)), Eq (s (Abstract.DerivingClause l l d d)),
                   Eq (s (Abstract.EquationLHS l l d d)), Eq (s (Abstract.EquationRHS l l d d)),
                   Eq (s (Abstract.Type l l d d)), Eq (s (Abstract.TypeLHS l l d d)),
                   Eq (s (Abstract.ClassInstanceLHS l l d d)),
                   Eq (Abstract.Name λ)) => Eq (Declaration λ l d s)

deriving instance Typeable (Expression λ l d s)
deriving instance (Data (s (Abstract.CaseAlternative l l d d)), Data (s (Abstract.Constructor l l d d)),
                   Data (s (Abstract.Expression l l d d)), Data (s (Abstract.GuardedExpression l l d d)),
                   Data (s (Abstract.Declaration l l d d)), Data (s (Abstract.FieldBinding l l d d)),
                   Data (s (Abstract.Pattern l l d d)), Data (s (Abstract.Statement l l d d)),
                   Data (s (Abstract.Type l l d d)), Data (s (Abstract.Value l l d d)), Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Expression λ l d s)
deriving instance (Show (s (Abstract.CaseAlternative l l d d)), Show (s (Abstract.Constructor l l d d)),
                   Show (s (Abstract.Expression l l d d)), Show (s (Abstract.GuardedExpression l l d d)),
                   Show (s (Abstract.Declaration l l d d)), Show (s (Abstract.FieldBinding l l d d)),
                   Show (s (Abstract.Pattern l l d d)), Show (s (Abstract.Statement l l d d)),
                   Show (s (Abstract.Type l l d d)), Show (s (Abstract.Value l l d d)),
                   Show (Abstract.QualifiedName λ)) => Show (Expression λ l d s)
deriving instance (Eq (s (Abstract.CaseAlternative l l d d)), Eq (s (Abstract.Constructor l l d d)),
                   Eq (s (Abstract.Expression l l d d)), Eq (s (Abstract.GuardedExpression l l d d)),
                   Eq (s (Abstract.Declaration l l d d)), Eq (s (Abstract.FieldBinding l l d d)),
                   Eq (s (Abstract.Pattern l l d d)), Eq (s (Abstract.Statement l l d d)),
                   Eq (s (Abstract.Type l l d d)), Eq (s (Abstract.Value l l d d)),
                   Eq (Abstract.QualifiedName λ)) => Eq (Expression λ l d s)

deriving instance Typeable (Type λ l d s)
deriving instance (Data (s (Abstract.Constructor l l d d)), Data (s (Abstract.Type l l d d)), Data (Abstract.Name λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Type λ l d s)
deriving instance (Show (s (Abstract.Constructor l l d d)), Show (s (Abstract.Type l l d d)),
                   Show (Abstract.Name λ)) => Show (Type λ l d s)
deriving instance (Eq (s (Abstract.Constructor l l d d)), Eq (s (Abstract.Type l l d d)),
                   Eq (Abstract.Name λ)) => Eq (Type λ l d s)

deriving instance Typeable (EquationLHS λ l d s)
deriving instance (Data (s (Abstract.EquationLHS l l d d)), Data (s (Abstract.Pattern l l d d)), Data (Abstract.Name λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (EquationLHS λ l d s)
deriving instance (Show (s (Abstract.EquationLHS l l d d)), Show (s (Abstract.Pattern l l d d)),
                   Show (Abstract.Name λ)) => Show (EquationLHS λ l d s)
deriving instance (Eq (s (Abstract.EquationLHS l l d d)), Eq (s (Abstract.Pattern l l d d)),
                   Eq (Abstract.Name λ)) => Eq (EquationLHS λ l d s)

deriving instance Typeable (EquationRHS λ l d s)
deriving instance (Data (s (Abstract.GuardedExpression l l d d)), Data (s (Abstract.Expression l l d d)),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (EquationRHS λ l d s)
deriving instance (Show (s (Abstract.GuardedExpression l l d d)), Show (s (Abstract.Expression l l d d))) =>
                  Show (EquationRHS λ l d s)
deriving instance (Eq (s (Abstract.GuardedExpression l l d d)), Eq (s (Abstract.Expression l l d d))) =>
                  Eq (EquationRHS λ l d s)

deriving instance Typeable (GuardedExpression λ l d s)
deriving instance (Data (s (Abstract.Statement l l d d)), Data (s (Abstract.Expression l l d d)),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (GuardedExpression λ l d s)
deriving instance (Show (s (Abstract.Statement l l d d)), Show (s (Abstract.Expression l l d d))) =>
                  Show (GuardedExpression λ l d s)
deriving instance (Eq (s (Abstract.Statement l l d d)), Eq (s (Abstract.Expression l l d d))) =>
                  Eq (GuardedExpression λ l d s)

deriving instance Typeable (Export λ l d s)
deriving instance (Data (Abstract.Members λ), Data (Abstract.ModuleName λ), Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Export λ l d s)
deriving instance (Show (Abstract.Members λ),
                   Show (Abstract.ModuleName λ), Show (Abstract.QualifiedName λ)) => Show (Export λ l d s)
deriving instance (Eq (Abstract.Members λ),
                   Eq (Abstract.ModuleName λ), Eq (Abstract.QualifiedName λ)) => Eq (Export λ l d s)

deriving instance Typeable (DerivingClause λ l d s)
deriving instance (Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (DerivingClause λ l d s)
deriving instance Show (Abstract.QualifiedName λ) => Show (DerivingClause λ l d s)
deriving instance Eq (Abstract.QualifiedName λ) => Eq (DerivingClause λ l d s)

deriving instance Typeable (Pattern λ l d s)
deriving instance (Data (s (Abstract.Constructor l l d d)), Data (s (Abstract.FieldPattern l l d d)),
                   Data (s (Abstract.Pattern l l d d)), Data (s (Abstract.Value l l d d)),
                   Data (Abstract.Name λ), Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Pattern λ l d s)
deriving instance (Show (s (Abstract.Constructor l l d d)), Show (s (Abstract.FieldPattern l l d d)),
                   Show (s (Abstract.Pattern l l d d)), Show (s (Abstract.Value l l d d)),
                   Show (Abstract.QualifiedName λ), Show (Abstract.Name λ)) => Show (Pattern λ l d s)
deriving instance (Eq (s (Abstract.Constructor l l d d)), Eq (s (Abstract.FieldPattern l l d d)),
                   Eq (s (Abstract.Pattern l l d d)), Eq (s (Abstract.Value l l d d)),
                   Eq (Abstract.QualifiedName λ), Eq (Abstract.Name λ)) => Eq (Pattern λ l d s)

deriving instance Typeable (Statement λ l d s)
deriving instance (Data (s (Abstract.Declaration l l d d)), Data (s (Abstract.Expression l l d d)),
                   Data (s (Abstract.Pattern l l d d)),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Statement λ l d s)
deriving instance (Show (s (Abstract.Declaration l l d d)), Show (s (Abstract.Expression l l d d)),
                   Show (s (Abstract.Pattern l l d d))) => Show (Statement λ l d s)
deriving instance (Eq (s (Abstract.Declaration l l d d)), Eq (s (Abstract.Expression l l d d)),
                   Eq (s (Abstract.Pattern l l d d))) => Eq (Statement λ l d s)

deriving instance Typeable (TypeLHS λ l d s)
deriving instance (Data (Abstract.Name λ), Data λ, Typeable l, Typeable d, Typeable s) => Data (TypeLHS λ l d s)
deriving instance (Show (Abstract.Name λ)) => Show (TypeLHS λ l d s)
deriving instance (Eq (Abstract.Name λ)) => Eq (TypeLHS λ l d s)

deriving instance Typeable (ClassInstanceLHS λ l d s)
deriving instance (Data (s (Abstract.Type l l d d)), Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (ClassInstanceLHS λ l d s)
deriving instance (Show (s (Abstract.Type l l d d)), Show (Abstract.QualifiedName λ)) => Show (ClassInstanceLHS λ l d s)
deriving instance (Eq (s (Abstract.Type l l d d)), Eq (Abstract.QualifiedName λ)) => Eq (ClassInstanceLHS λ l d s)

deriving instance Typeable (Import λ l d s)
deriving instance (Data (s (Abstract.ImportSpecification l l d d)), Data (Abstract.ModuleName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Import λ l d s)
deriving instance (Show (s (Abstract.ImportSpecification l l d d)), Show (Abstract.ModuleName λ)) =>
                  Show (Import λ l d s)
deriving instance (Eq (s (Abstract.ImportSpecification l l d d)), Eq (Abstract.ModuleName λ)) =>
                  Eq (Import λ l d s)

deriving instance Typeable (ImportSpecification λ l d s)
deriving instance (Data (s (Abstract.ImportItem l l d d)),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (ImportSpecification λ l d s)
deriving instance (Show (s (Abstract.ImportItem l l d d))) => Show (ImportSpecification λ l d s)
deriving instance (Eq (s (Abstract.ImportItem l l d d))) => Eq (ImportSpecification λ l d s)

deriving instance Typeable (ImportItem λ l d s)
deriving instance (Data (Abstract.Members λ), Data (Abstract.Name λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (ImportItem λ l d s)
deriving instance (Show (Abstract.Members λ), Show (Abstract.Name λ)) => Show (ImportItem λ l d s)
deriving instance (Eq (Abstract.Members λ), Eq (Abstract.Name λ)) => Eq (ImportItem λ l d s)

deriving instance Typeable (Context λ l d s)
deriving instance (Data (s (Abstract.Context l l d d)), Data (s (Abstract.Type l l d d)),
                   Data (Abstract.Name λ), Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Context λ l d s)
deriving instance (Show (s (Abstract.Context l l d d)), Show (s (Abstract.Type l l d d)),
                   Show (Abstract.QualifiedName λ), Show (Abstract.Name λ)) => Show (Context λ l d s)
deriving instance (Eq (s (Abstract.Context l l d d)), Eq (s (Abstract.Type l l d d)),
                   Eq (Abstract.QualifiedName λ), Eq (Abstract.Name λ)) => Eq (Context λ l d s)

deriving instance Typeable (DataConstructor λ l d s)
deriving instance (Data (s (Abstract.FieldDeclaration l l d d)), Data (s (Abstract.Type l l d d)),
                   Data (Abstract.Name λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (DataConstructor λ l d s)
deriving instance (Show (s (Abstract.FieldDeclaration l l d d)), Show (s (Abstract.Type l l d d)),
                   Show (Abstract.Name λ), Show (Abstract.Name λ)) => Show (DataConstructor λ l d s)
deriving instance (Eq (s (Abstract.FieldDeclaration l l d d)), Eq (s (Abstract.Type l l d d)),
                   Eq (Abstract.Name λ), Eq (Abstract.Name λ)) => Eq (DataConstructor λ l d s)

deriving instance Typeable (FieldBinding λ l d s)
deriving instance (Data (s (Abstract.Expression l l d d)), Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (FieldBinding λ l d s)
deriving instance (Show (s (Abstract.Expression l l d d)), Show (Abstract.QualifiedName λ)) =>
                  Show (FieldBinding λ l d s)
deriving instance (Eq (s (Abstract.Expression l l d d)), Eq (Abstract.QualifiedName λ)) =>
                  Eq (FieldBinding λ l d s)

deriving instance Typeable (FieldDeclaration λ l d s)
deriving instance (Data (s (Abstract.Type l l d d)), Data (Abstract.Name λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (FieldDeclaration λ l d s)
deriving instance (Show (s (Abstract.Type l l d d)), Show (Abstract.Name λ)) => Show (FieldDeclaration λ l d s)
deriving instance (Eq (s (Abstract.Type l l d d)), Eq (Abstract.Name λ)) => Eq (FieldDeclaration λ l d s)

deriving instance Typeable (FieldPattern λ l d s)
deriving instance (Data (s (Abstract.Pattern l l d d)), Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (FieldPattern λ l d s)
deriving instance (Show (s (Abstract.Pattern l l d d)), Show (Abstract.QualifiedName λ)) => Show (FieldPattern λ l d s)
deriving instance (Eq (s (Abstract.Pattern l l d d)), Eq (Abstract.QualifiedName λ)) => Eq (FieldPattern λ l d s)

deriving instance Typeable (CaseAlternative λ l d s)
deriving instance (Data (s (Abstract.Pattern l l d d)), Data (s (Abstract.EquationRHS l l d d)),
                   Data (s (Abstract.Declaration l l d d)),
                   Typeable λ, Typeable l, Typeable d, Typeable s) => Data (CaseAlternative λ l d s)
deriving instance (Show (s (Abstract.Pattern l l d d)), Show (s (Abstract.EquationRHS l l d d)),
                   Show (s (Abstract.Declaration l l d d))) => Show (CaseAlternative λ l d s)
deriving instance (Eq (s (Abstract.Pattern l l d d)), Eq (s (Abstract.EquationRHS l l d d)),
                   Eq (s (Abstract.Declaration l l d d))) => Eq (CaseAlternative λ l d s)

deriving instance Data (Abstract.QualifiedName λ) => Typeable (Constructor λ l d s)
deriving instance (Data (Abstract.QualifiedName λ),
                   Data λ, Typeable l, Typeable d, Typeable s) => Data (Constructor λ l d s)
deriving instance Show (Abstract.QualifiedName λ) => Show (Constructor λ l d s)
deriving instance Eq (Abstract.QualifiedName λ) => Eq (Constructor λ l d s)

data CallingConvention λ = CCall | CppCall | DotNetCall | JvmCall | StdCall deriving (Typeable (CallingConvention λ)
Typeable (CallingConvention λ) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> CallingConvention λ
 -> c (CallingConvention λ))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (CallingConvention λ))
-> (CallingConvention λ -> Constr)
-> (CallingConvention λ -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (CallingConvention λ)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (CallingConvention λ)))
-> ((forall b. Data b => b -> b)
    -> CallingConvention λ -> CallingConvention λ)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> CallingConvention λ -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> CallingConvention λ -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> CallingConvention λ -> m (CallingConvention λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> CallingConvention λ -> m (CallingConvention λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> CallingConvention λ -> m (CallingConvention λ))
-> Data (CallingConvention λ)
CallingConvention λ -> Constr
CallingConvention λ -> DataType
(forall b. Data b => b -> b)
-> CallingConvention λ -> CallingConvention λ
forall λ. Data λ => Typeable (CallingConvention λ)
forall λ. Data λ => CallingConvention λ -> Constr
forall λ. Data λ => CallingConvention λ -> DataType
forall λ.
Data λ =>
(forall b. Data b => b -> b)
-> CallingConvention λ -> CallingConvention λ
forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> CallingConvention λ -> u
forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> CallingConvention λ -> [u]
forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallingConvention λ)
forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> CallingConvention λ
-> c (CallingConvention λ)
forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (CallingConvention λ))
forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallingConvention λ))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> CallingConvention λ -> u
forall u.
(forall d. Data d => d -> u) -> CallingConvention λ -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallingConvention λ)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> CallingConvention λ
-> c (CallingConvention λ)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (CallingConvention λ))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallingConvention λ))
$cgfoldl :: forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> CallingConvention λ
-> c (CallingConvention λ)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> CallingConvention λ
-> c (CallingConvention λ)
$cgunfold :: forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallingConvention λ)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallingConvention λ)
$ctoConstr :: forall λ. Data λ => CallingConvention λ -> Constr
toConstr :: CallingConvention λ -> Constr
$cdataTypeOf :: forall λ. Data λ => CallingConvention λ -> DataType
dataTypeOf :: CallingConvention λ -> DataType
$cdataCast1 :: forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (CallingConvention λ))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (CallingConvention λ))
$cdataCast2 :: forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallingConvention λ))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallingConvention λ))
$cgmapT :: forall λ.
Data λ =>
(forall b. Data b => b -> b)
-> CallingConvention λ -> CallingConvention λ
gmapT :: (forall b. Data b => b -> b)
-> CallingConvention λ -> CallingConvention λ
$cgmapQl :: forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
$cgmapQr :: forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallingConvention λ -> r
$cgmapQ :: forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> CallingConvention λ -> [u]
gmapQ :: forall u.
(forall d. Data d => d -> u) -> CallingConvention λ -> [u]
$cgmapQi :: forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> CallingConvention λ -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> CallingConvention λ -> u
$cgmapM :: forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
$cgmapMp :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
$cgmapMo :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> CallingConvention λ -> m (CallingConvention λ)
Data, CallingConvention λ -> CallingConvention λ -> Bool
(CallingConvention λ -> CallingConvention λ -> Bool)
-> (CallingConvention λ -> CallingConvention λ -> Bool)
-> Eq (CallingConvention λ)
forall λ. CallingConvention λ -> CallingConvention λ -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall λ. CallingConvention λ -> CallingConvention λ -> Bool
== :: CallingConvention λ -> CallingConvention λ -> Bool
$c/= :: forall λ. CallingConvention λ -> CallingConvention λ -> Bool
/= :: CallingConvention λ -> CallingConvention λ -> Bool
Eq, Int -> CallingConvention λ -> ShowS
[CallingConvention λ] -> ShowS
CallingConvention λ -> String
(Int -> CallingConvention λ -> ShowS)
-> (CallingConvention λ -> String)
-> ([CallingConvention λ] -> ShowS)
-> Show (CallingConvention λ)
forall λ. Int -> CallingConvention λ -> ShowS
forall λ. [CallingConvention λ] -> ShowS
forall λ. CallingConvention λ -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall λ. Int -> CallingConvention λ -> ShowS
showsPrec :: Int -> CallingConvention λ -> ShowS
$cshow :: forall λ. CallingConvention λ -> String
show :: CallingConvention λ -> String
$cshowList :: forall λ. [CallingConvention λ] -> ShowS
showList :: [CallingConvention λ] -> ShowS
Show)
data CallSafety λ = SafeCall | UnsafeCall deriving (Typeable (CallSafety λ)
Typeable (CallSafety λ) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> CallSafety λ -> c (CallSafety λ))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (CallSafety λ))
-> (CallSafety λ -> Constr)
-> (CallSafety λ -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (CallSafety λ)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (CallSafety λ)))
-> ((forall b. Data b => b -> b) -> CallSafety λ -> CallSafety λ)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r)
-> (forall u. (forall d. Data d => d -> u) -> CallSafety λ -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> CallSafety λ -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ))
-> Data (CallSafety λ)
CallSafety λ -> Constr
CallSafety λ -> DataType
(forall b. Data b => b -> b) -> CallSafety λ -> CallSafety λ
forall λ. Data λ => Typeable (CallSafety λ)
forall λ. Data λ => CallSafety λ -> Constr
forall λ. Data λ => CallSafety λ -> DataType
forall λ.
Data λ =>
(forall b. Data b => b -> b) -> CallSafety λ -> CallSafety λ
forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> CallSafety λ -> u
forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> CallSafety λ -> [u]
forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallSafety λ)
forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CallSafety λ -> c (CallSafety λ)
forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (CallSafety λ))
forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallSafety λ))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> CallSafety λ -> u
forall u. (forall d. Data d => d -> u) -> CallSafety λ -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallSafety λ)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CallSafety λ -> c (CallSafety λ)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (CallSafety λ))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallSafety λ))
$cgfoldl :: forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CallSafety λ -> c (CallSafety λ)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CallSafety λ -> c (CallSafety λ)
$cgunfold :: forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallSafety λ)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (CallSafety λ)
$ctoConstr :: forall λ. Data λ => CallSafety λ -> Constr
toConstr :: CallSafety λ -> Constr
$cdataTypeOf :: forall λ. Data λ => CallSafety λ -> DataType
dataTypeOf :: CallSafety λ -> DataType
$cdataCast1 :: forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (CallSafety λ))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (CallSafety λ))
$cdataCast2 :: forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallSafety λ))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (CallSafety λ))
$cgmapT :: forall λ.
Data λ =>
(forall b. Data b => b -> b) -> CallSafety λ -> CallSafety λ
gmapT :: (forall b. Data b => b -> b) -> CallSafety λ -> CallSafety λ
$cgmapQl :: forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
$cgmapQr :: forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CallSafety λ -> r
$cgmapQ :: forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> CallSafety λ -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> CallSafety λ -> [u]
$cgmapQi :: forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> CallSafety λ -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CallSafety λ -> u
$cgmapM :: forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
$cgmapMp :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
$cgmapMo :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CallSafety λ -> m (CallSafety λ)
Data, CallSafety λ -> CallSafety λ -> Bool
(CallSafety λ -> CallSafety λ -> Bool)
-> (CallSafety λ -> CallSafety λ -> Bool) -> Eq (CallSafety λ)
forall λ. CallSafety λ -> CallSafety λ -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall λ. CallSafety λ -> CallSafety λ -> Bool
== :: CallSafety λ -> CallSafety λ -> Bool
$c/= :: forall λ. CallSafety λ -> CallSafety λ -> Bool
/= :: CallSafety λ -> CallSafety λ -> Bool
Eq, Int -> CallSafety λ -> ShowS
[CallSafety λ] -> ShowS
CallSafety λ -> String
(Int -> CallSafety λ -> ShowS)
-> (CallSafety λ -> String)
-> ([CallSafety λ] -> ShowS)
-> Show (CallSafety λ)
forall λ. Int -> CallSafety λ -> ShowS
forall λ. [CallSafety λ] -> ShowS
forall λ. CallSafety λ -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall λ. Int -> CallSafety λ -> ShowS
showsPrec :: Int -> CallSafety λ -> ShowS
$cshow :: forall λ. CallSafety λ -> String
show :: CallSafety λ -> String
$cshowList :: forall λ. [CallSafety λ] -> ShowS
showList :: [CallSafety λ] -> ShowS
Show)

data Associativity λ = NonAssociative | LeftAssociative | RightAssociative deriving (Typeable (Associativity λ)
Typeable (Associativity λ) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> Associativity λ -> c (Associativity λ))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (Associativity λ))
-> (Associativity λ -> Constr)
-> (Associativity λ -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (Associativity λ)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (Associativity λ)))
-> ((forall b. Data b => b -> b)
    -> Associativity λ -> Associativity λ)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Associativity λ -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Associativity λ -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> Associativity λ -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> Associativity λ -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> Associativity λ -> m (Associativity λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> Associativity λ -> m (Associativity λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> Associativity λ -> m (Associativity λ))
-> Data (Associativity λ)
Associativity λ -> Constr
Associativity λ -> DataType
(forall b. Data b => b -> b) -> Associativity λ -> Associativity λ
forall λ. Data λ => Typeable (Associativity λ)
forall λ. Data λ => Associativity λ -> Constr
forall λ. Data λ => Associativity λ -> DataType
forall λ.
Data λ =>
(forall b. Data b => b -> b) -> Associativity λ -> Associativity λ
forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> Associativity λ -> u
forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> Associativity λ -> [u]
forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Associativity λ)
forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Associativity λ -> c (Associativity λ)
forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Associativity λ))
forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Associativity λ))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> Associativity λ -> u
forall u. (forall d. Data d => d -> u) -> Associativity λ -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Associativity λ)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Associativity λ -> c (Associativity λ)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Associativity λ))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Associativity λ))
$cgfoldl :: forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Associativity λ -> c (Associativity λ)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Associativity λ -> c (Associativity λ)
$cgunfold :: forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Associativity λ)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Associativity λ)
$ctoConstr :: forall λ. Data λ => Associativity λ -> Constr
toConstr :: Associativity λ -> Constr
$cdataTypeOf :: forall λ. Data λ => Associativity λ -> DataType
dataTypeOf :: Associativity λ -> DataType
$cdataCast1 :: forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Associativity λ))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Associativity λ))
$cdataCast2 :: forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Associativity λ))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Associativity λ))
$cgmapT :: forall λ.
Data λ =>
(forall b. Data b => b -> b) -> Associativity λ -> Associativity λ
gmapT :: (forall b. Data b => b -> b) -> Associativity λ -> Associativity λ
$cgmapQl :: forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
$cgmapQr :: forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Associativity λ -> r
$cgmapQ :: forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> Associativity λ -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Associativity λ -> [u]
$cgmapQi :: forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> Associativity λ -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> Associativity λ -> u
$cgmapM :: forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
$cgmapMp :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
$cgmapMo :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> Associativity λ -> m (Associativity λ)
Data, Associativity λ -> Associativity λ -> Bool
(Associativity λ -> Associativity λ -> Bool)
-> (Associativity λ -> Associativity λ -> Bool)
-> Eq (Associativity λ)
forall λ. Associativity λ -> Associativity λ -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall λ. Associativity λ -> Associativity λ -> Bool
== :: Associativity λ -> Associativity λ -> Bool
$c/= :: forall λ. Associativity λ -> Associativity λ -> Bool
/= :: Associativity λ -> Associativity λ -> Bool
Eq, Int -> Associativity λ -> ShowS
[Associativity λ] -> ShowS
Associativity λ -> String
(Int -> Associativity λ -> ShowS)
-> (Associativity λ -> String)
-> ([Associativity λ] -> ShowS)
-> Show (Associativity λ)
forall λ. Int -> Associativity λ -> ShowS
forall λ. [Associativity λ] -> ShowS
forall λ. Associativity λ -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall λ. Int -> Associativity λ -> ShowS
showsPrec :: Int -> Associativity λ -> ShowS
$cshow :: forall λ. Associativity λ -> String
show :: Associativity λ -> String
$cshowList :: forall λ. [Associativity λ] -> ShowS
showList :: [Associativity λ] -> ShowS
Show)

data Members λ = AllMembers
               | MemberList [Name λ]
               deriving (Typeable (Members λ)
Typeable (Members λ) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> Members λ -> c (Members λ))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (Members λ))
-> (Members λ -> Constr)
-> (Members λ -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (Members λ)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (Members λ)))
-> ((forall b. Data b => b -> b) -> Members λ -> Members λ)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Members λ -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Members λ -> r)
-> (forall u. (forall d. Data d => d -> u) -> Members λ -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> Members λ -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Members λ -> m (Members λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Members λ -> m (Members λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Members λ -> m (Members λ))
-> Data (Members λ)
Members λ -> Constr
Members λ -> DataType
(forall b. Data b => b -> b) -> Members λ -> Members λ
forall λ. Data λ => Typeable (Members λ)
forall λ. Data λ => Members λ -> Constr
forall λ. Data λ => Members λ -> DataType
forall λ.
Data λ =>
(forall b. Data b => b -> b) -> Members λ -> Members λ
forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> Members λ -> u
forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> Members λ -> [u]
forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Members λ)
forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Members λ -> c (Members λ)
forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Members λ))
forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Members λ))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Members λ -> u
forall u. (forall d. Data d => d -> u) -> Members λ -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Members λ)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Members λ -> c (Members λ)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Members λ))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Members λ))
$cgfoldl :: forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Members λ -> c (Members λ)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Members λ -> c (Members λ)
$cgunfold :: forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Members λ)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Members λ)
$ctoConstr :: forall λ. Data λ => Members λ -> Constr
toConstr :: Members λ -> Constr
$cdataTypeOf :: forall λ. Data λ => Members λ -> DataType
dataTypeOf :: Members λ -> DataType
$cdataCast1 :: forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Members λ))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Members λ))
$cdataCast2 :: forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Members λ))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Members λ))
$cgmapT :: forall λ.
Data λ =>
(forall b. Data b => b -> b) -> Members λ -> Members λ
gmapT :: (forall b. Data b => b -> b) -> Members λ -> Members λ
$cgmapQl :: forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
$cgmapQr :: forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Members λ -> r
$cgmapQ :: forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> Members λ -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Members λ -> [u]
$cgmapQi :: forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> Members λ -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Members λ -> u
$cgmapM :: forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
$cgmapMp :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
$cgmapMo :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Members λ -> m (Members λ)
Data, Members λ -> Members λ -> Bool
(Members λ -> Members λ -> Bool)
-> (Members λ -> Members λ -> Bool) -> Eq (Members λ)
forall λ. Members λ -> Members λ -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall λ. Members λ -> Members λ -> Bool
== :: Members λ -> Members λ -> Bool
$c/= :: forall λ. Members λ -> Members λ -> Bool
/= :: Members λ -> Members λ -> Bool
Eq, Int -> Members λ -> ShowS
[Members λ] -> ShowS
Members λ -> String
(Int -> Members λ -> ShowS)
-> (Members λ -> String)
-> ([Members λ] -> ShowS)
-> Show (Members λ)
forall λ. Int -> Members λ -> ShowS
forall λ. [Members λ] -> ShowS
forall λ. Members λ -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall λ. Int -> Members λ -> ShowS
showsPrec :: Int -> Members λ -> ShowS
$cshow :: forall λ. Members λ -> String
show :: Members λ -> String
$cshowList :: forall λ. [Members λ] -> ShowS
showList :: [Members λ] -> ShowS
Show)

-- | A primitive name type
newtype Name λ = Name {forall λ. Name λ -> Text
getName :: Text} deriving (Typeable (Name λ)
Typeable (Name λ) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> Name λ -> c (Name λ))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (Name λ))
-> (Name λ -> Constr)
-> (Name λ -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (Name λ)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Name λ)))
-> ((forall b. Data b => b -> b) -> Name λ -> Name λ)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Name λ -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Name λ -> r)
-> (forall u. (forall d. Data d => d -> u) -> Name λ -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Name λ -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Name λ -> m (Name λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Name λ -> m (Name λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Name λ -> m (Name λ))
-> Data (Name λ)
Name λ -> Constr
Name λ -> DataType
(forall b. Data b => b -> b) -> Name λ -> Name λ
forall λ. Data λ => Typeable (Name λ)
forall λ. Data λ => Name λ -> Constr
forall λ. Data λ => Name λ -> DataType
forall λ.
Data λ =>
(forall b. Data b => b -> b) -> Name λ -> Name λ
forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> Name λ -> u
forall λ u. Data λ => (forall d. Data d => d -> u) -> Name λ -> [u]
forall λ r r'.
Data λ =>
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
forall λ r r'.
Data λ =>
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Name λ)
forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Name λ -> c (Name λ)
forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Name λ))
forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Name λ))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Name λ -> u
forall u. (forall d. Data d => d -> u) -> Name λ -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Name λ)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Name λ -> c (Name λ)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Name λ))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Name λ))
$cgfoldl :: forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Name λ -> c (Name λ)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Name λ -> c (Name λ)
$cgunfold :: forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Name λ)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Name λ)
$ctoConstr :: forall λ. Data λ => Name λ -> Constr
toConstr :: Name λ -> Constr
$cdataTypeOf :: forall λ. Data λ => Name λ -> DataType
dataTypeOf :: Name λ -> DataType
$cdataCast1 :: forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Name λ))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Name λ))
$cdataCast2 :: forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Name λ))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Name λ))
$cgmapT :: forall λ.
Data λ =>
(forall b. Data b => b -> b) -> Name λ -> Name λ
gmapT :: (forall b. Data b => b -> b) -> Name λ -> Name λ
$cgmapQl :: forall λ r r'.
Data λ =>
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
$cgmapQr :: forall λ r r'.
Data λ =>
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Name λ -> r
$cgmapQ :: forall λ u. Data λ => (forall d. Data d => d -> u) -> Name λ -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Name λ -> [u]
$cgmapQi :: forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> Name λ -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Name λ -> u
$cgmapM :: forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
$cgmapMp :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
$cgmapMo :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Name λ -> m (Name λ)
Data, Name λ -> Name λ -> Bool
(Name λ -> Name λ -> Bool)
-> (Name λ -> Name λ -> Bool) -> Eq (Name λ)
forall λ. Name λ -> Name λ -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall λ. Name λ -> Name λ -> Bool
== :: Name λ -> Name λ -> Bool
$c/= :: forall λ. Name λ -> Name λ -> Bool
/= :: Name λ -> Name λ -> Bool
Eq, Eq (Name λ)
Eq (Name λ) =>
(Name λ -> Name λ -> Ordering)
-> (Name λ -> Name λ -> Bool)
-> (Name λ -> Name λ -> Bool)
-> (Name λ -> Name λ -> Bool)
-> (Name λ -> Name λ -> Bool)
-> (Name λ -> Name λ -> Name λ)
-> (Name λ -> Name λ -> Name λ)
-> Ord (Name λ)
Name λ -> Name λ -> Bool
Name λ -> Name λ -> Ordering
Name λ -> Name λ -> Name λ
forall λ. Eq (Name λ)
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall λ. Name λ -> Name λ -> Bool
forall λ. Name λ -> Name λ -> Ordering
forall λ. Name λ -> Name λ -> Name λ
$ccompare :: forall λ. Name λ -> Name λ -> Ordering
compare :: Name λ -> Name λ -> Ordering
$c< :: forall λ. Name λ -> Name λ -> Bool
< :: Name λ -> Name λ -> Bool
$c<= :: forall λ. Name λ -> Name λ -> Bool
<= :: Name λ -> Name λ -> Bool
$c> :: forall λ. Name λ -> Name λ -> Bool
> :: Name λ -> Name λ -> Bool
$c>= :: forall λ. Name λ -> Name λ -> Bool
>= :: Name λ -> Name λ -> Bool
$cmax :: forall λ. Name λ -> Name λ -> Name λ
max :: Name λ -> Name λ -> Name λ
$cmin :: forall λ. Name λ -> Name λ -> Name λ
min :: Name λ -> Name λ -> Name λ
Ord, Int -> Name λ -> ShowS
[Name λ] -> ShowS
Name λ -> String
(Int -> Name λ -> ShowS)
-> (Name λ -> String) -> ([Name λ] -> ShowS) -> Show (Name λ)
forall λ. Int -> Name λ -> ShowS
forall λ. [Name λ] -> ShowS
forall λ. Name λ -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall λ. Int -> Name λ -> ShowS
showsPrec :: Int -> Name λ -> ShowS
$cshow :: forall λ. Name λ -> String
show :: Name λ -> String
$cshowList :: forall λ. [Name λ] -> ShowS
showList :: [Name λ] -> ShowS
Show)

-- | A name that may but need not be qualified with a 'ModuleName'
data QualifiedName λ = QualifiedName (Maybe (ModuleName λ)) (Name λ) deriving (Typeable (QualifiedName λ)
Typeable (QualifiedName λ) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> QualifiedName λ -> c (QualifiedName λ))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (QualifiedName λ))
-> (QualifiedName λ -> Constr)
-> (QualifiedName λ -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (QualifiedName λ)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (QualifiedName λ)))
-> ((forall b. Data b => b -> b)
    -> QualifiedName λ -> QualifiedName λ)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> QualifiedName λ -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> QualifiedName λ -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> QualifiedName λ -> m (QualifiedName λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> QualifiedName λ -> m (QualifiedName λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> QualifiedName λ -> m (QualifiedName λ))
-> Data (QualifiedName λ)
QualifiedName λ -> Constr
QualifiedName λ -> DataType
(forall b. Data b => b -> b) -> QualifiedName λ -> QualifiedName λ
forall λ. Data λ => Typeable (QualifiedName λ)
forall λ. Data λ => QualifiedName λ -> Constr
forall λ. Data λ => QualifiedName λ -> DataType
forall λ.
Data λ =>
(forall b. Data b => b -> b) -> QualifiedName λ -> QualifiedName λ
forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> QualifiedName λ -> u
forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> QualifiedName λ -> [u]
forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualifiedName λ)
forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualifiedName λ -> c (QualifiedName λ)
forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (QualifiedName λ))
forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualifiedName λ))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> QualifiedName λ -> u
forall u. (forall d. Data d => d -> u) -> QualifiedName λ -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualifiedName λ)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualifiedName λ -> c (QualifiedName λ)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (QualifiedName λ))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualifiedName λ))
$cgfoldl :: forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualifiedName λ -> c (QualifiedName λ)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualifiedName λ -> c (QualifiedName λ)
$cgunfold :: forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualifiedName λ)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualifiedName λ)
$ctoConstr :: forall λ. Data λ => QualifiedName λ -> Constr
toConstr :: QualifiedName λ -> Constr
$cdataTypeOf :: forall λ. Data λ => QualifiedName λ -> DataType
dataTypeOf :: QualifiedName λ -> DataType
$cdataCast1 :: forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (QualifiedName λ))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (QualifiedName λ))
$cdataCast2 :: forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualifiedName λ))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualifiedName λ))
$cgmapT :: forall λ.
Data λ =>
(forall b. Data b => b -> b) -> QualifiedName λ -> QualifiedName λ
gmapT :: (forall b. Data b => b -> b) -> QualifiedName λ -> QualifiedName λ
$cgmapQl :: forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
$cgmapQr :: forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualifiedName λ -> r
$cgmapQ :: forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> QualifiedName λ -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> QualifiedName λ -> [u]
$cgmapQi :: forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> QualifiedName λ -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> QualifiedName λ -> u
$cgmapM :: forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
$cgmapMp :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
$cgmapMo :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> QualifiedName λ -> m (QualifiedName λ)
Data, QualifiedName λ -> QualifiedName λ -> Bool
(QualifiedName λ -> QualifiedName λ -> Bool)
-> (QualifiedName λ -> QualifiedName λ -> Bool)
-> Eq (QualifiedName λ)
forall λ. QualifiedName λ -> QualifiedName λ -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall λ. QualifiedName λ -> QualifiedName λ -> Bool
== :: QualifiedName λ -> QualifiedName λ -> Bool
$c/= :: forall λ. QualifiedName λ -> QualifiedName λ -> Bool
/= :: QualifiedName λ -> QualifiedName λ -> Bool
Eq, Eq (QualifiedName λ)
Eq (QualifiedName λ) =>
(QualifiedName λ -> QualifiedName λ -> Ordering)
-> (QualifiedName λ -> QualifiedName λ -> Bool)
-> (QualifiedName λ -> QualifiedName λ -> Bool)
-> (QualifiedName λ -> QualifiedName λ -> Bool)
-> (QualifiedName λ -> QualifiedName λ -> Bool)
-> (QualifiedName λ -> QualifiedName λ -> QualifiedName λ)
-> (QualifiedName λ -> QualifiedName λ -> QualifiedName λ)
-> Ord (QualifiedName λ)
QualifiedName λ -> QualifiedName λ -> Bool
QualifiedName λ -> QualifiedName λ -> Ordering
QualifiedName λ -> QualifiedName λ -> QualifiedName λ
forall λ. Eq (QualifiedName λ)
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall λ. QualifiedName λ -> QualifiedName λ -> Bool
forall λ. QualifiedName λ -> QualifiedName λ -> Ordering
forall λ. QualifiedName λ -> QualifiedName λ -> QualifiedName λ
$ccompare :: forall λ. QualifiedName λ -> QualifiedName λ -> Ordering
compare :: QualifiedName λ -> QualifiedName λ -> Ordering
$c< :: forall λ. QualifiedName λ -> QualifiedName λ -> Bool
< :: QualifiedName λ -> QualifiedName λ -> Bool
$c<= :: forall λ. QualifiedName λ -> QualifiedName λ -> Bool
<= :: QualifiedName λ -> QualifiedName λ -> Bool
$c> :: forall λ. QualifiedName λ -> QualifiedName λ -> Bool
> :: QualifiedName λ -> QualifiedName λ -> Bool
$c>= :: forall λ. QualifiedName λ -> QualifiedName λ -> Bool
>= :: QualifiedName λ -> QualifiedName λ -> Bool
$cmax :: forall λ. QualifiedName λ -> QualifiedName λ -> QualifiedName λ
max :: QualifiedName λ -> QualifiedName λ -> QualifiedName λ
$cmin :: forall λ. QualifiedName λ -> QualifiedName λ -> QualifiedName λ
min :: QualifiedName λ -> QualifiedName λ -> QualifiedName λ
Ord, Int -> QualifiedName λ -> ShowS
[QualifiedName λ] -> ShowS
QualifiedName λ -> String
(Int -> QualifiedName λ -> ShowS)
-> (QualifiedName λ -> String)
-> ([QualifiedName λ] -> ShowS)
-> Show (QualifiedName λ)
forall λ. Int -> QualifiedName λ -> ShowS
forall λ. [QualifiedName λ] -> ShowS
forall λ. QualifiedName λ -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall λ. Int -> QualifiedName λ -> ShowS
showsPrec :: Int -> QualifiedName λ -> ShowS
$cshow :: forall λ. QualifiedName λ -> String
show :: QualifiedName λ -> String
$cshowList :: forall λ. [QualifiedName λ] -> ShowS
showList :: [QualifiedName λ] -> ShowS
Show)

newtype ModuleName λ = ModuleName (NonEmpty (Name λ)) deriving (Typeable (ModuleName λ)
Typeable (ModuleName λ) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> ModuleName λ -> c (ModuleName λ))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (ModuleName λ))
-> (ModuleName λ -> Constr)
-> (ModuleName λ -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (ModuleName λ)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (ModuleName λ)))
-> ((forall b. Data b => b -> b) -> ModuleName λ -> ModuleName λ)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r)
-> (forall u. (forall d. Data d => d -> u) -> ModuleName λ -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> ModuleName λ -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ))
-> Data (ModuleName λ)
ModuleName λ -> Constr
ModuleName λ -> DataType
(forall b. Data b => b -> b) -> ModuleName λ -> ModuleName λ
forall λ. Data λ => Typeable (ModuleName λ)
forall λ. Data λ => ModuleName λ -> Constr
forall λ. Data λ => ModuleName λ -> DataType
forall λ.
Data λ =>
(forall b. Data b => b -> b) -> ModuleName λ -> ModuleName λ
forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> ModuleName λ -> u
forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> ModuleName λ -> [u]
forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ModuleName λ)
forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ModuleName λ -> c (ModuleName λ)
forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (ModuleName λ))
forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ModuleName λ))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> ModuleName λ -> u
forall u. (forall d. Data d => d -> u) -> ModuleName λ -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ModuleName λ)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ModuleName λ -> c (ModuleName λ)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (ModuleName λ))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ModuleName λ))
$cgfoldl :: forall λ (c :: * -> *).
Data λ =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ModuleName λ -> c (ModuleName λ)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ModuleName λ -> c (ModuleName λ)
$cgunfold :: forall λ (c :: * -> *).
Data λ =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ModuleName λ)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (ModuleName λ)
$ctoConstr :: forall λ. Data λ => ModuleName λ -> Constr
toConstr :: ModuleName λ -> Constr
$cdataTypeOf :: forall λ. Data λ => ModuleName λ -> DataType
dataTypeOf :: ModuleName λ -> DataType
$cdataCast1 :: forall λ (t :: * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (ModuleName λ))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (ModuleName λ))
$cdataCast2 :: forall λ (t :: * -> * -> *) (c :: * -> *).
(Data λ, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ModuleName λ))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (ModuleName λ))
$cgmapT :: forall λ.
Data λ =>
(forall b. Data b => b -> b) -> ModuleName λ -> ModuleName λ
gmapT :: (forall b. Data b => b -> b) -> ModuleName λ -> ModuleName λ
$cgmapQl :: forall λ r r'.
Data λ =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
$cgmapQr :: forall λ r r'.
Data λ =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ModuleName λ -> r
$cgmapQ :: forall λ u.
Data λ =>
(forall d. Data d => d -> u) -> ModuleName λ -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> ModuleName λ -> [u]
$cgmapQi :: forall λ u.
Data λ =>
Int -> (forall d. Data d => d -> u) -> ModuleName λ -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ModuleName λ -> u
$cgmapM :: forall λ (m :: * -> *).
(Data λ, Monad m) =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
$cgmapMp :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
$cgmapMo :: forall λ (m :: * -> *).
(Data λ, MonadPlus m) =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ModuleName λ -> m (ModuleName λ)
Data, ModuleName λ -> ModuleName λ -> Bool
(ModuleName λ -> ModuleName λ -> Bool)
-> (ModuleName λ -> ModuleName λ -> Bool) -> Eq (ModuleName λ)
forall λ. ModuleName λ -> ModuleName λ -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall λ. ModuleName λ -> ModuleName λ -> Bool
== :: ModuleName λ -> ModuleName λ -> Bool
$c/= :: forall λ. ModuleName λ -> ModuleName λ -> Bool
/= :: ModuleName λ -> ModuleName λ -> Bool
Eq, Eq (ModuleName λ)
Eq (ModuleName λ) =>
(ModuleName λ -> ModuleName λ -> Ordering)
-> (ModuleName λ -> ModuleName λ -> Bool)
-> (ModuleName λ -> ModuleName λ -> Bool)
-> (ModuleName λ -> ModuleName λ -> Bool)
-> (ModuleName λ -> ModuleName λ -> Bool)
-> (ModuleName λ -> ModuleName λ -> ModuleName λ)
-> (ModuleName λ -> ModuleName λ -> ModuleName λ)
-> Ord (ModuleName λ)
ModuleName λ -> ModuleName λ -> Bool
ModuleName λ -> ModuleName λ -> Ordering
ModuleName λ -> ModuleName λ -> ModuleName λ
forall λ. Eq (ModuleName λ)
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall λ. ModuleName λ -> ModuleName λ -> Bool
forall λ. ModuleName λ -> ModuleName λ -> Ordering
forall λ. ModuleName λ -> ModuleName λ -> ModuleName λ
$ccompare :: forall λ. ModuleName λ -> ModuleName λ -> Ordering
compare :: ModuleName λ -> ModuleName λ -> Ordering
$c< :: forall λ. ModuleName λ -> ModuleName λ -> Bool
< :: ModuleName λ -> ModuleName λ -> Bool
$c<= :: forall λ. ModuleName λ -> ModuleName λ -> Bool
<= :: ModuleName λ -> ModuleName λ -> Bool
$c> :: forall λ. ModuleName λ -> ModuleName λ -> Bool
> :: ModuleName λ -> ModuleName λ -> Bool
$c>= :: forall λ. ModuleName λ -> ModuleName λ -> Bool
>= :: ModuleName λ -> ModuleName λ -> Bool
$cmax :: forall λ. ModuleName λ -> ModuleName λ -> ModuleName λ
max :: ModuleName λ -> ModuleName λ -> ModuleName λ
$cmin :: forall λ. ModuleName λ -> ModuleName λ -> ModuleName λ
min :: ModuleName λ -> ModuleName λ -> ModuleName λ
Ord, Int -> ModuleName λ -> ShowS
[ModuleName λ] -> ShowS
ModuleName λ -> String
(Int -> ModuleName λ -> ShowS)
-> (ModuleName λ -> String)
-> ([ModuleName λ] -> ShowS)
-> Show (ModuleName λ)
forall λ. Int -> ModuleName λ -> ShowS
forall λ. [ModuleName λ] -> ShowS
forall λ. ModuleName λ -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall λ. Int -> ModuleName λ -> ShowS
showsPrec :: Int -> ModuleName λ -> ShowS
$cshow :: forall λ. ModuleName λ -> String
show :: ModuleName λ -> String
$cshowList :: forall λ. [ModuleName λ] -> ShowS
showList :: [ModuleName λ] -> ShowS
Show)

$(concat <$>
  (forM [Rank2.TH.deriveFunctor, Rank2.TH.deriveFoldable, Rank2.TH.deriveTraversable, Rank2.TH.unsafeDeriveApply,
         Transformation.Shallow.TH.deriveAll, Transformation.Deep.TH.deriveAll] $
   \derive-> mconcat <$> mapM derive
             [''Module, ''Export, ''Import, ''ImportItem, ''ImportSpecification,
              ''Declaration, ''DerivingClause, ''EquationLHS, ''EquationRHS,
              ''ClassInstanceLHS, ''TypeLHS, ''Type, ''Context,
              ''Expression, ''Value, ''Pattern, ''GuardedExpression, ''Statement,
              ''FieldBinding, ''FieldDeclaration, ''FieldPattern, ''CaseAlternative, ''Constructor, ''DataConstructor]))