0      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~."(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneB6Abstract notion of a name (the constructor is hidden).,Monad for generating fresh (abstract) names.Change the type tag of a name.7Run the given computation with the next available name.-Evaluate a computation that uses fresh names. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions) Safe-Inferred !"246HJKM.This class represents higher-order difunctors.vA higher-order difunctor gives rise to a higher-order functor when restricted to a particular contravariant argument.  "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"2346HJKMUHDifunctors representing data structures that can be traversed from left to right. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None 2468=HJKM %Remove annotations from a signature. OThis class defines how to distribute an annotation over a sum of signatures. 'Inject an annotation over a signature. (Project an annotation from a signature. !7This data type adds a constant product to a signature. #7Formal product of signatures (higher-order difunctors).%Signature containment relation for automatic injections. The left-hand must be an atomic signature, where as the right-hand side must have a list-like structure. Examples include  f :<: f :+: g and g :<: f :+: (g :+: h), non-examples include f :+: g :<: f :+: (g :+: h) and f :<: (f :+: g) :+: h.(&Formal sum of signatures (difunctors).+rUtility function to case on a higher-order difunctor sum, without exposing the internal representation of sums.  !"#$%&'()*+,-./012345678 !"#$%&'()*+,-(*)+87%&'654#$,-!"32 10/. !"#$%&'(*)+,-./012345678!"#$("(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None24=M: Signature printing. An instance ShowHD f gives rise to an instance Show (Term f i). <Derive an instance of :R for a type constructor of any parametric kind taking at least three arguments. :;<:;<:;<"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneM=Derive an instance of R for a type constructor of any parametric kind taking at least three arguments. ==="(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"6<=HJKM >Monads for which embedded TrmG values, which are parametric at top level, can be made into monadic Term5 values, i.e. "pushing the parametricity inwards". @oA term is a context with no holes, where all occurrences of the contravariant parameter is fully parametric. C "Preterms" |DA context may contain holes. EPhantom type used to define @. FPhantom type used to define D. G#This data type represents contexts over a signature. Contexts are terms containing zero or more holes, and zero or more parameters. The first parameter is a phantom type indicating whether the context has holes. The second paramater is the signature of the context, in the form of a  Data.Comp.Param.Multi.HDifunctor. The third parameter is the type of parameters, the fourth parameter is the type of holes, and the fifth parameter is the GADT type. K-Convert a difunctorial value into a context. MThis is an instance of   for G.NThis is an instance of  for G.>?@ABCDEFGHIJKLMN>?@ABCDEFGHIJKLMNGJIHFE@ABCDKLMN>?>?@ABCDEFGJIHKLMN"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"3=HJKM(R2This type represents a monadic term homomorphism. S1This type represents a monadic context function. T3This type represents a monadic signature function. U*This type represents a term homomorphism. V)This type represents a context function. W+This type represents a signature function. XjThis type represents a monadic algebra, but where the covariant argument is also a monadic computation. Y9This type represents a monadic algebra. It is similar to Z# but the return type is monadic. Z1This type represents an algebra over a difunctor f and carrier a. [+Construct a catamorphism for contexts over f with holes of type b, from the given algebra. \1Construct a catamorphism from the given algebra. ]A generalisation of \ from terms over f to contexts over f:, where the holes have the type of the algebra carrier. ^<This function applies a whole context into another context. _3Construct a monadic catamorphism for contexts over f with holes of type b", from the given monadic algebra. `AConstruct a monadic catamorphism from the given monadic algebra. a3Construct a monadic catamorphism for contexts over f with holes of type b", from the given monadic algebra. bAConstruct a monadic catamorphism from the given monadic algebra. c9Apply a term homomorphism recursively to a term/context. dXApply a term homomorphism recursively to a term/context. This is a top-down variant of c.e Compose two term homomorphisms. fBCompose an algebra with a term homomorphism to get a new algebra. gAThis function applies a signature function to the given context. hAThis function applies a signature function to the given context. i0This function composes two signature functions. jGLifts the given signature function to the canonical term homomorphism. kLift the given signature function to a monadic signature function. Note that term homomorphisms are instances of signature functions. Hence this function also applies to term homomorphisms. lILift the give monadic signature function to a monadic term homomorphism. mBLift the given signature function to a monadic term homomorphism. nAApply a monadic term homomorphism recursively to a term/context. o;A restricted form of |appHomM| which only works for terms. p`Apply a monadic term homomorphism recursively to a term/context. This is a top-down variant of n.q<A restricted form of |appHomM'| which only works for terms. rIThis function applies a monadic signature function to the given context. s>A restricted form of |appSigFunM| which only works for terms. thThis function applies a monadic signature function to the given context. This is a top-down variant of r.u?A restricted form of |appSigFunM'| which only works for terms. v(Compose two monadic term homomorphisms. w[Compose a monadic algebra with a monadic term homomorphism to get a new monadic algebra. xSCompose a monadic algebra with a term homomorphism to get a new monadic algebra. y8This function composes two monadic signature functions. (RSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy+OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy+Z[\]^Y_`XQPOabVWUcdeghijfSTRklnopqmrstuvywx(RSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None!""(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"2346JKMLProject the outermost layer of a term to a sub signature. If the signature g is compound of n atomic signatures, use projectn instead.Tries to coerce a termcontext to a term0context over a sub-signature. If the signature g is compound of n atomic signatures, use  deepProjectn instead.NInject a term where the outermost layer is a sub signature. If the signature g is compound of n atomic signatures, use injectn instead.VInject a term over a sub signature to a term over larger signature. If the signature g is compound of n atomic signatures, use  deepInjectn instead.<This function injects a whole context into another context. 4This function lifts the given functor to a context. ?z{|}~A%&'(+z{|}~A%&'(+z{|}~?z{|}~ '(c) 2010-2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"246HJKMTransform a function with a domain constructed from a higher-order difunctor to a function with a domain constructed with the same higher-order difunctor, but with an additional annotation. Transform a function with a domain constructed from a higher-order difunctor to a function with a domain constructed with the same higher-order difunctor, but with an additional annotation. TStrip the annotations from a term over a higher-order difunctor with annotations. )Lift a term homomorphism over signatures f and gR to a term homomorphism over the same signatures, but extended with annotations. 1Lift a monadic term homomorphism over signatures f and g[ to a monadic term homomorphism over the same signatures, but extended with annotations. 4Annotate each node of a term with a constant value. This function is similar to G but applies to signatures with an annotation which is then ignored.  !"#$!"#$  "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"24JK Signature equality. An instance EqHD f gives rise to an instance  Eq (Term f i),. The equality test is performed inside the + monad for generating fresh identifiers. JEquality on parametric values. The equality test is performed inside the ( monad for generating fresh identifiers.Equality on terms. From an  difunctor an ; instance of the corresponding term type can be derived.  is propagated through sums. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None24MDerive an instance of R for a type constructor of any parametric kind taking at least three arguments.  "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"24JK Signature ordering. An instance OrdHD f gives rise to an instance  Ord (Term f). Ordering of parametric values.Ordering of terms. From an  difunctor an ; instance of the corresponding term type can be derived.  is propagated through sums. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None24MDerive an instance of R for a type constructor of any parametric kind taking at least three arguments.  "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneDerive smart constructors for a higher-order difunctor. The smart constructors are similar to the ordinary constructors, but a 'inject . hdimap Var id' is automatically inserted. !"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneDerive smart constructors with annotations for a higher-order difunctor. The smart constructors are similar to the ordinary constructors, but a 'injectA . hdimap Var id' is automatically inserted. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneGiven the name of a type class, where the first parameter is a higher-order difunctor, lift it to sums of higher-order difunctors. Example: class ShowHD f where ... is lifted as <instance (ShowHD f, ShowHD g) => ShowHD (f :+: g) where ... . 9:;<=9:;<=""(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"24JKPrinting of terms. From an : higher-order difunctor an :; instance of the corresponding term type can be derived. :;:;#"(c) 2011 Patrick Bahr, Tom HvitvedBSD3:Patrick Bahr <paba@diku.dk>, Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None  !"#$%&'(+>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None 246HJKM!The desugaring term homomorphism.Desugar a term.#Lift desugaring to annotated terms.Default desugaring instance. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneB6Abstract notion of a name (the constructor is hidden).,Monad for generating fresh (abstract) names.7Run the given computation with the next available name.-Evaluate a computation that uses fresh names. $"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None24M Signature printing. An instance ShowD f gives rise to an instance  Show (Term f). Derive an instance of P for a type constructor of any parametric kind taking at least two arguments. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions) Safe-Inferred246This class represents difunctors, i.e. binary type constructors that are contravariant in the first argument and covariant in the second argument.&The canonical example of a difunctor. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions) Safe-Inferred36TDifunctors representing data structures that can be traversed from left to right. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions) Safe-Inferred2468JK %Remove annotations from a signature. OThis class defines how to distribute an annotation over a sum of signatures. 'Inject an annotation over a signature. (Project an annotation from a signature. 7This data type adds a constant product to a signature. *Formal product of signatures (difunctors).Signature containment relation for automatic injections. The left-hand must be an atomic signature, where as the right-hand side must have a list-like structure. Examples include  f :<: f :+: g and g :<: f :+: (g :+: h), non-examples include f :+: g :<: f :+: (g :+: h) and f :<: (f :+: g) :+: h.&Formal sum of signatures (difunctors).eUtility function to case on a difunctor sum, without exposing the internal representation of sums. %(c) 2010-2011 Patrick BahrBSD3Patrick Bahr <paba@diku.dk> experimentalnon-portable (GHC Extensions)NoneDerive an instance of  TraversableP for a type constructor of any first-order kind taking at least one argument. &"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneMDerive an instance of P for a type constructor of any parametric kind taking at least two arguments. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"246<=HM Monads for which embedded TrmG values, which are parametric at top level, can be made into monadic Term5 values, i.e. "pushing the parametricity inwards". oA term is a context with no holes, where all occurrences of the contravariant parameter is fully parametric.  "Preterms" A context may contain holes. Phantom type used to define . Phantom type used to define . #This data type represents contexts over a signature. Contexts are terms containing zero or more holes, and zero or more parameters. The first parameter is a phantom type indicating whether the context has holes. The second paramater is the signature of the context, in the form of a Data.Comp.Param.Difunctorb. The third parameter is the type of parameters, and the fourth parameter is the type of holes.  -Convert a difunctorial value into a context.  VThis combinator maps a function over a context by applying the function to each hole.                "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"3HJKMI AThis type represents a generalised cv-coalgebra over a difunctor f and carrier a. =This type represents a monadic cv-coalgebra over a difunctor f and carrier a. 5This type represents a cv-coalgebra over a difunctor f and carrier a. The list of (a,b)s represent the parameters that may occur in the constructed value. The first component represents the seed of the parameter, and the second component is the (polymorphic) parameter itself. If f4 is itself a binder, then the parameters bound by fX can be passed to the covariant argument, thereby making them available to sub terms. 9This type represents a monadic cv-algebra over a functor f and carrier a. 3This type represents a cv-algebra over a difunctor f and carrier a. :This type represents a monadic r-coalgebra over a functor f and carrier a. 5This type represents an r-coalgebra over a difunctor f and carrier a. :This type represents a monadic r-algebra over a difunctor f and carrier a. 3This type represents an r-algebra over a difunctor f and carrier a. :This type represents a monadic coalgebra over a difunctor f and carrier a. 2This type represents a coalgebra over a difunctor f and carrier a. The list of (a,b)s represent the parameters that may occur in the constructed value. The first component represents the seed of the parameter, and the second component is the (polymorphic) parameter itself. If f4 is itself a binder, then the parameters bound by fX can be passed to the covariant argument, thereby making them available to sub terms. EThis type represents a monadic term homomorphism. It is similar to , but has monadic values also in the domain. 2This type represents a monadic term homomorphism. FThis type represents a monadic signature function. It is similar to , but has monadic values also in the domain. 1This type represents a monadic context function. 3This type represents a monadic signature function. *This type represents a term homomorphism. +This type represents a signature function. )This type represents a context function.  9This type represents a monadic algebra. It is similar to !# but the return type is monadic. !1This type represents an algebra over a difunctor f and carrier a. "+Construct a catamorphism for contexts over f with holes of type b, from the given algebra. #1Construct a catamorphism from the given algebra. $A generalisation of # from terms over f to contexts over f:, where the holes have the type of the algebra carrier. %<This function applies a whole context into another context. &MConvert a monadic algebra into an ordinary algebra with a monadic carrier. '3Construct a monadic catamorphism for contexts over f with holes of type b", from the given monadic algebra. (AConstruct a monadic catamorphism from the given monadic algebra. )A generalisation of ( from terms over f to contexts over fB, where the holes have the type of the monadic algebra carrier. *9Apply a term homomorphism recursively to a term/context. +9Apply a term homomorphism recursively to a term/context. , Compose two term homomorphisms. -BCompose an algebra with a term homomorphism to get a new algebra. /AThis function applies a signature function to the given context. 0bThis function applies a signature function to the given context. This is a top-bottom variant of /.10This function composes two signature functions. 2EThis function composes a term homomorphism and a signature function. 3EThis function composes a term homomorphism and a signature function. 4GLifts the given signature function to the canonical term homomorphism. 5Lift the given signature function to a monadic signature function. Note that term homomorphisms are instances of signature functions. Hence this function also applies to term homomorphisms. 6BLift the given signature function to a monadic term homomorphism. 7cApply a monadic term homomorphism recursively to a term/context. The monad is sequenced bottom-up.8;A restricted form of |appHomM| which only works for terms. 9aApply a monadic term homomorphism recursively to a term/context. The monad is sequence top-down.:<A restricted form of |appHomM'| which only works for terms. ;tThis function constructs the unique monadic homomorphism from the initial term algebra to the given term algebra. <IThis function applies a monadic signature function to the given context. =>A restricted form of |appSigFunM| which only works for terms. >iThis function applies a monadic signature function to the given context. This is a 'top-down variant of <.??A restricted form of |appSigFunM'| which only works for terms. @AThis function applies a signature function to the given context. A?A restricted form of |appSigFunMD| which only works for terms. B(Compose two monadic term homomorphisms. C(Compose two monadic term homomorphisms. D(Compose two monadic term homomorphisms. E(Compose two monadic term homomorphisms. F[Compose a monadic algebra with a monadic term homomorphism to get a new monadic algebra. GSCompose a monadic algebra with a term homomorphism to get a new monadic algebra. H\Compose a monadic algebra with a monadic signature function to get a new monadic algebra. ITCompose a monadic algebra with a signature function to get a new monadic algebra. J8This function composes two monadic signature functions. K3Construct an anamorphism from the given coalgebra. LBConstruct a monadic anamorphism from the given monadic coalgebra. M3Construct a paramorphism from the given r-algebra. NCConstruct a monadic paramorphism from the given monadic r-algebra. O5Construct an apomorphism from the given r-coalgebra. PDConstruct a monadic apomorphism from the given monadic r-coalgebra. This function applies  at the tip of the term.Q5Construct a histomorphism from the given cv-algebra. REConstruct a monadic histomorphism from the given monadic cv-algebra. S6Construct a futumorphism from the given cv-coalgebra. TFConstruct a monadic futumorphism from the given monadic cv-coalgebra. UBConstruct a futumorphism from the given generalised cv-coalgebra. L  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUI  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUI!"#$% &'()*+,/01234-.5789:6;<=>?@ABCJDEHIFGKLMNOPQRS UTL  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU'"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None!"("(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None!"2346HJKM_LProject the outermost layer of a term to a sub signature. If the signature g is compound of n atomic signatures, use projectn instead.iTries to coerce a termcontext to a term0context over a sub-signature. If the signature g is compound of n atomic signatures, use  deepProjectn instead.|NInject a term where the outermost layer is a sub signature. If the signature g is compound of n atomic signatures, use injectn instead.}NInject a term where the outermost layer is a sub signature. If the signature g is compound of n atomic signatures, use injectn instead.VInject a term over a sub signature to a term over larger signature. If the signature g is compound of n atomic signatures, use  deepInjectn instead.<This function injects a whole context into another context. 4This function lifts the given functor to a context. @VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~BVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~BVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'(c) 2010-2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"246HJKMTransform a function with a domain constructed from a functor to a function with a domain constructed with the same functor, but with an additional annotation. Transform a function with a domain constructed from a functor to a function with a domain constructed with the same functor, but with an additional annotation. CStrip the annotations from a term over a functor with annotations. )Lift a term homomorphism over signatures f and gR to a term homomorphism over the same signatures, but extended with annotations. 1Lift a monadic term homomorphism over signatures f and g[ to a monadic term homomorphism over the same signatures, but extended with annotations. 4Annotate each node of a term with a constant value. This function is similar to _E but applies to signatures with an annotation which is then ignored. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"24JK Signature equality. An instance EqD f gives rise to an instance  Eq (Term f),. The equality test is performed inside the + monad for generating fresh identifiers. JEquality on parametric values. The equality test is performed inside the ( monad for generating fresh identifiers.Equality on terms. From an  difunctor an ; instance of the corresponding term type can be derived.  is propagated through sums.   )"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None24MDerive an instance of P for a type constructor of any parametric kind taking at least two arguments. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"24JK Signature ordering. An instance OrdD f gives rise to an instance  Ord (Term f). Ordering of parametric values. Ordering of terms.  From an  difunctor an ; instance of the corresponding term type can be derived.   is propagated through sums.          *"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None24MDerive an instance of P for a type constructor of any parametric kind taking at least two arguments. +"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneDerive smart constructors for a difunctor. The smart constructors are similar to the ordinary constructors, but a 'inject . dimap Var id' is automatically inserted. ,"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NoneDerive smart constructors with annotations for a difunctor. The smart constructors are similar to the ordinary constructors, but a 'injectA . dimap Var id' is automatically inserted. "(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)NonetGiven the name of a type class, where the first parameter is a difunctor, lift it to sums of difunctors. Example: class ShowD f where ... is lifted as 9instance (ShowD f, ShowD g) => ShowD (f :+: g) where ... . 99-"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None !"24JKPrinting of terms. From an  difunctor an ; instance of the corresponding term type can be derived. (c) 2011 Patrick BahrBSD3Patrick Bahr <paba@diku.dk> experimentalnon-portable (GHC Extensions)None!"3HJKM GThis type represents algebras which have terms with thunks as carrier.*This type represents contexts with thunks.'This type represents terms with thunks.'This type represents terms with thunks.7This function turns a monadic computation into a thunk.DThis function evaluates all thunks until a non-thunk node is found.?This function first evaluates the argument term into whnf via  and then projects the top-level signature to the desired subsignature. Failure to do the projection is signalled as a failure in the monad.#This function evaluates all thunks.#This function evaluates all thunks.This function evaluates all thunks while simultaneously projecting the term to a smaller signature. Failure to do the projection is signalled as a failure in the monad as in .This function evaluates all thunks while simultaneously projecting the term to a smaller signature. Failure to do the projection is signalled as a failure in the monad as in .}This combinator makes the evaluation of the given functor application strict by evaluating all thunks of immediate subterms.}This combinator makes the evaluation of the given functor application strict by evaluating all thunks of immediate subterms.."(c) 2011 Patrick Bahr, Tom HvitvedBSD3:Patrick Bahr <paba@diku.dk>, Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"(c) 2011 Patrick Bahr, Tom HvitvedBSD3Tom Hvitved <hvitved@diku.dk> experimentalnon-portable (GHC Extensions)None 246HJKM!The desugaring term homomorphism.Desugar a term.#Lift desugaring to annotated terms.Default desugaring instance./012345645745845845945:45:45;45<45=45>45>45?45@45@45ABC4DE4DF4DGHIJKLMNOOPPQRSTUVWXYZ[\]^_`abcd4efghijklmmnopqrstruvwxyz{|z{}z{}~       !  / 0 2 3$$$JKLMNOOPPQRSTUVXYZ[\]`ab  % & klmmnopqrstruvw ~ !"#$%&'()*+,-./01234)5678*9+,:;<=>?@ABCDEFGHI/0JKLMNNOPQRSTUVWXYZ[\ ] ^_`a b c d e f g_`h i j k l8"m"n"o"p / 0 J K L$N$N$Oqr%s%tPQRSuvw'T'U'V(W(X(YZ[\]xycz{f|}j~-m---;compdata-param-0.8.0.2Data.Comp.Param.Multi.FreshM Data.Comp.Param.Multi.HDifunctor$Data.Comp.Param.Multi.HDitraversableData.Comp.Param.Multi.OpsData.Comp.Param.Multi.DeriveData.Comp.Param.Multi.TermData.Comp.Param.Multi.AlgebraData.Comp.Param.Multi.Sum Data.Comp.Param.Multi.AnnotationData.Comp.Param.Multi.EqualityData.Comp.Param.Multi.OrderingData.Comp.Param.Multi.DesugarData.Comp.Param.FreshMData.Comp.Param.DeriveData.Comp.Param.DifunctorData.Comp.Param.DitraversableData.Comp.Param.OpsData.Comp.Param.TermData.Comp.Param.AlgebraData.Comp.Param.SumData.Comp.Param.AnnotationData.Comp.Param.EqualityData.Comp.Param.OrderingData.Comp.Param.ThunkData.Comp.Param.Desugar!Data.Comp.Param.Multi.Derive.Show'Data.Comp.Param.Multi.Derive.HDifunctor(Data.Comp.Param.Multi.Derive.Projections'Data.Comp.Param.Multi.Derive.Injections%Data.Comp.Param.Multi.Derive.Equality%Data.Comp.Param.Multi.Derive.Ordering.Data.Comp.Param.Multi.Derive.SmartConstructors/Data.Comp.Param.Multi.Derive.SmartAConstructorsData.Comp.Param.Multi.ShowData.Comp.Param.MultiData.Comp.Param.Derive.Show$Data.Comp.Param.Derive.Ditraversable Data.Comp.Param.Derive.Difunctor"Data.Comp.Param.Derive.Projections!Data.Comp.Param.Derive.InjectionsData.Comp.Param.Derive.EqualityData.Comp.Param.Derive.Ordering(Data.Comp.Param.Derive.SmartConstructors)Data.Comp.Param.Derive.SmartAConstructorsData.Comp.Param.ShowData.Comp.ParamNameFreshM nameCoercewithName evalFreshM compdata-0.9Data.Comp.Multi.HFunctorNatMunKKunIIhfmapHFunctorunEEunAA:-> HDifunctorhdimapData.Comp.Multi.HTraversable htraversehmapM HTraversableHDitraversablehdimapMRemAremADistAnninjectAprojectA:&::*::<:injproj:+:InrInlcaseHDffstfsnd$fDistAnn:+:p:+:$fDistAnnfp:&: $fRemA:&:f $fRemA:+::+:$fHDitraversable:&:$fHDifunctor:&: $f:<:f:+: $f:<:f:+:0$f:<:ff$fHDitraversable:+:$fHDifunctor:+:Data.Comp.Derive.UtilsderiveShowHDshowHD makeShowHDmakeHDifunctor ParamFunctortermMTermunTermTrmContextNoHoleHoleCxtVarInsimpCxttoCxthfmapCxt hdimapMCxttransformers-0.4.1.0Data.Functor.Compose getComposeComposeHomMCxtFunMSigFunMHomCxtFunSigFunAlgM'AlgMAlgfreecatacata'appCxtfreeMcataMfreeM'cataM'appHomappHom'compHomcompAlg appSigFun appSigFun' compSigFunhomsigFunMhom'homMappHomMappTHomMappHomM' appTHomM' appSigFunM appTSigFunM appSigFunM' appTSigFunM'compHomMcompAlgM compAlgM' compSigFunMproj2proj3proj4proj5proj6proj7proj8proj9proj10projectproject2project3project4project5project6project7project8project9 project10 deepProject deepProject2 deepProject3 deepProject4 deepProject5 deepProject6 deepProject7 deepProject8 deepProject9 deepProject10inj2inj3inj4inj5inj6inj7inj8inj9inj10injectinject2inject3inject4inject5inject6inject7inject8inject9inject10 deepInject deepInject2 deepInject3 deepInject4 deepInject5 deepInject6 deepInject7 deepInject8 deepInject9 deepInject10 injectCxtliftCxtliftAliftA'stripApropAnnpropAnnMannproject'EqHDeqHDPEqpeqmakeEqHDOrdHD compareHDPOrdpcompare makeOrdHDsmartConstructorssmartAConstructorsliftSumDesugardesugHom desugHom'desugardesugarA $fDesugarfg $fDesugar:+:hShowDshowD makeShowD Difunctordimapdifmap DitraversabledimapM disequencecaseD$fDitraversable:&:$fDifunctor:&:$fDitraversable:+:$fDifunctor:+:makeDitraversable makeDifunctorcxtMapCVCoalg'CVCoalgMCVCoalgCVAlgMCVAlgRCoalgMRCoalgRAlgMRAlgCoalgMCoalgHomMDSigFunMDalgM compAlgSigFun compHomSigFun compSigFunHomhomMD appSigFunMD appTSigFunMD compHomM'compSigFunHomMcompSigFunHomM'compAlgSigFunMcompAlgSigFunM'anaanaMparaparaMapoapoMhistohistoMfutufutuMfutu'inject'EqDeqDmakeEqDOrdDcompareDcompListmakeOrdDAlgTThunkCxtTTrmTTermTthunkwhnfwhnf'whnfPrnfTnfnfTPrnfPr evalStrictstrictstrict'unFreshM $fOrdName $fShowName $fHFunctorfDummy $fShowDummy coerceTermM$fParamFunctor[]$fParamFunctorEither$fParamFunctorMaybeprojnprojectn deepProjectninjninjectn deepInjectn$fEq:+:$fOrd:+: $fShow:+:$fEqTerm $fEqHDCxtghc-prim GHC.ClassesEq $fEqHD:+:$fPEqCxt $fPEqName$fPEqK $fOrdTerm $fOrdHDCxtOrd $fOrdHD:+: $fPOrdCxt $fPOrdName$fPOrdK $fShowTerm $fShowHDCxt $fShowHD:&: $fShowHD:+:$fDifunctor(->) $fFunctorfiteriter' projectTipfmapCxt dimapMCxt$fEqDCxt$fEqD:+:$fPEqa$fPEq[] $fOrdDCxt $fOrdD:+:$fPOrda$fPOrd[] $fShowDCxt $fShowD:&: $fShowD:+: