úÎ!T?èÿ[      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ None .7=?HMXk ClaopPowerset data type.WThis data type is a newtype wrapper around '[]'. This exists in order to implement an [ and \1 instance that cannot be harmful for the outside.laopWrapper around ]@s that have a restrictive semantic associated. A value of type  n m$ can only be instanciated with some ] i that's  n <= i <= m.laop<Natural constructor function. Throws a runtime error if the ]* value is greater than the corresponding m or lower than n in the  n m type.laop(Auxiliary function that promotes binary ] functions to  binary functions.laop2Auxiliary function that promotes ternary (binary) ] functions to  functions.laop2Auxiliary function that promotes ternary (binary) ] functions to  functions. laop Optimized [= instance for tuples that comply with the given constraints. laopIThrows a runtime error if any of the operations overflows or underflows.(c) Armando Santos 2019-2020armandoifsantos@gmail.com experimentalNone!À(c) Armando Santos 2019-2020armandoifsantos@gmail.com experimentalNone&',./1=>?@AHUVXkmh&:laopType class for defining the fromList conversion function.Given that it is not possible to branch on types at the term level type classes are needed very much like an inductive definition but on types.laopiBuild a matrix out of a list of list of elements. Throws a runtime error if the dimensions do not match.^laopDConstraint type synonyms to keep the type signatures less convolutedlaopIType family that normalizes the representation of a given data structurelaopHType family that computes of a given type dimension from a given natural4Thanks to Li-Yao Xia this type family is super fast.laopDType family that computes the cardinality of a given type dimension.FIt can also count the cardinality of custom types that implement the _ instance.laopALAoP (Linear Algebra of Programming) Inductive Matrix definition.#laopEmpty matrix constructor$laopUnit matrix constructor%laopMatrix ! constructor&laopMatrix ! constructor'laopMatrix " constructor(laopMatrix " constructor)laopTMatrix builder function. Constructs a matrix provided with a construction function.*laop!Constructs a column vector matrix+laopConstructs a row vector matrix,laop6Lifts functions to matrices with arbitrary dimensions.ONOTE: Be careful to not ask for a matrix bigger than the cardinality of types a or b allows.-laop5Lifts functions to matrices with dimensions matching a and b cardinality's..laop1Converts a matrix to a list of lists of elements./laop(Converts a matrix to a list of elements.0laop3The zero matrix. A matrix wholly filled with zeros.1laop2The ones matrix. A matrix wholly filled with ones.Also known as T (Top) matrix.2laopLThe constant matrix constructor. A matrix wholly filled with a given value.3laopThe T (Top) row vector matrix.4laopIdentity matrix.5laop?Matrix composition. Equivalent to matrix-matrix multiplication.QThis definition takes advantage of divide-and-conquer and fusion laws from LAoP.6laop$Biproduct first component projection7laop%Biproduct second component projection8laop#Biproduct first component injection9laop$Biproduct second component injection:laopObtain the number of rows. NOTE: The `I constaint is needed in order to obtain the dimensions in constant time.TODO: A :! function that does not need the `) constraint in exchange for performance.;laopObtain the number of columns. NOTE: The `I constaint is needed in order to obtain the dimensions in constant time.TODO: A ;! function that does not need the `) constraint in exchange for performance.<laop9Matrix coproduct functor also known as matrix direct sum.=laop5Khatri Rao product first component projection matrix.>laop6Khatri Rao product second component projection matrix.?laop7Khatri Rao Matrix product also known as matrix pairing.DNOTE: That this is not a true categorical product, see for instance: ` | kp1 . khatri a b == a khatri a b ==> | | kp2 . khatri a b == b Emphasis on the implication symbol.@laop6Matrix product functor also known as kronecker productAlaopMatrix "abiding" followin the 'Junc'-'Split' abide law.Law: ! (" a c) (" b d) == " (! a b) (! c d) BlaopMatrix "abiding" followin the 'Split'-'Junc' abide law. " (! a b) (! c d) == ! (" a c) (" b d) ClaopMatrix transposition.DlaopSelective functors DQ operator equivalent inspired by the ArrowMonad solution presented in the paper.Flaop6McCarthy's Conditional expresses probabilistic choice.GlaopMatrix pretty printerHlaopMatrix pretty printerIlaopHelper conversion functionJlaopHelper conversion functionKlaopRelational negationLlaopRelational additionMlaopRelational multiplicationNlaopRelational subtractionOlaopMatrix relational composition.Plaop Matrix relational right divisionQlaopMatrix relational left divisionRlaop$Matrix relational symmetric divisionSlaop7Lifts functions to relations with arbitrary dimensions.QNOTE: Be careful to not ask for a relation bigger than the cardinality of types a or b allows.Tlaop6Lifts functions to relations with dimensions matching a and b cardinality's.Ulaop-Lifts a relation function to a Boolean MatrixZlaop#It isn't possible to implement the a% function so it's implementation is b . However 5Z can be and this partial class implementation exists just to make the code more readable. Please use 4 instead.= !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU= !"#$%'./)+*0132;:CDEFAB(67&89<@=>?45,-GHIJOPQRSTUKLMN&3(2<5@4(c) Armando Santos 2019-2020armandoifsantos@gmail.com experimentalNone &',.1;<>XkÞcTjlaopDConstraint type synonyms to keep the type signatures less convolutedklaopRelation data type.mlaop6Boolean type synonym for working with boolean matricesnlaopEmpty matrix constructorolaopUnit matrix constructorplaopBoolean Matrix Junc1 constructor, also known as relational coproduct.See ¯.qlaopBoolean Matrix Junc constructorSee ¯.rlaopBoolean Matrix Split/ constructor, also known as relational product.slaopBoolean Matrix Split constructortlaopiBuild a matrix out of a list of list of elements. Throws a runtime error if the dimensions do not match.ulaopTMatrix builder function. Constructs a matrix provided with a construction function.vlaop6Lifts functions to matrices with arbitrary dimensions.ONOTE: Be careful to not ask for a matrix bigger than the cardinality of types a or b allows.wlaop5Lifts functions to matrices with dimensions matching a and b cardinality's.xlaopLifts relation functions to kclaop Lowers a k to a functionylaop1Converts a matrix to a list of lists of elements.zlaop(Converts a matrix to a list of elements.{laopConverts a well typed k to d.|laopPower transpose.)Maps a relation to a set valued function.}laopBelongs relation~laop7The zero relation. A relation where no element of type a relates with elements of type b.4Also known as "¥ (Bottom) Relation or empty Relation.  r `ƒ ` "¥ == "¥ `ƒ` r == "¥ "¥ `Œ ` R && R `Œ` T == True laop:The ones relation. A relation where every element of type a% relates with every element of type b.5Also known as T (Top) Relation or universal Relation.  "¥ `Œ ` R && R `Œ` T == True €laop The T (Top) row vector relation.laopPoint constant relation‚laopIdentity matrix ‚ `ƒ` r == r == r `ƒ` ‚ ƒlaopRelational composition r `ƒ` (s `ƒ ` p) = (r `ƒ` s) `ƒ` p „laopRelational right division„ x y is the largest relation z which, pre-composed with y, approximates x.…laopRelational left divisionThe dual division operator: … y x == ‹ („ (‹ x) (‹ y) †laopRelational symmetric division‰ c b († s r) means that b and c. are related to exactly the same outputs by r and by s.‡laopRelational shrinking.r `‡` s is the largest part of r1 such that, if it yields an output for an input x), it must be a maximum, with respect to s , among all possible outputs of x by r.ˆlaopRelational overriding.r `ˆ` s2 yields the relation which contains the whole of s and that part of r where s is undefined. ~ `ˆ ` s == s r `ˆ` ~ == r r `ˆ` r == r ‰laopRelational application.If a and b are related by k r then ‰ a b r == o ( 1)ŠlaopRelational application The same as ‰ but converts m to d‹laopRelational converse Given binary k r, writing ‰ a b r (read: b is related to a by r ) means the same as ‰ b a (‹ r), where ‹ r! is said to be the converse of r. In terms of grammar, ‹ r! corresponds to the passive voiceŒlaop&Relational inclusion (subset or equal)laop$Relational implication (the same as Œ)ŽlaopRelational bi-implicationlaopRelational intersectionLifts pointwise conjunction. (r `` s) ` ` t == r `` (s `` t) x `Œ` r ` ` s == x ` ` r && x `` s laopRelational unionLifts pointwise disjunction. (r `` s) ` ` t == r ` (s `` t) r `` s `Œ ` x == r `Œ ` x && s `Œ` x r `ƒ` (s ` ` t) == (r `ƒ` s) `` (r `ƒ ` t) (s `` t) `ƒ ` r == (s `ƒ` r) `` (t `ƒ` r) ‘laopRelation Kernel ‘ r == ‹ r `ƒ` r ‘ r == ’ (‹ r) ’laopRelation Image ’ r == r `ƒ ` conv r ’ r == ‘ (‹ r) “laop#Function division. Special case of †.NOTE: _This is only valid_ if f and g are ˜s, i.e. ” and –. “ f g == ‹ g `ƒ` f”laopA k r is ” Ž Ÿ (’ r)•laopA k r is • Ž Ÿ (‘ r)–laopA k r is – Ž ž (‘ r)—laopA k r is — Ž ž (’ r)˜laopA k r is a ˜ Ž ” r && – rA ˜ f( enjoys the following properties, where r and s are binary relations: f `ƒ` r `Œ ` s == r `Œ` f `ƒ` s r `ƒ` f `Œ ` s == r `Œ` s `ƒ` f ™laopA k r is a ™ Ž • r && – ršlaopA k r is an š Ž — r && ” r›laopA k r is a › Ž ˜ r && š rœlaopA k r is a œ Ž ˜ r && ™ rlaopA k r is an  Ž œ r && › ržlaopA k r is ž Ž ‚ `Œ` rŸlaopA k r is Ÿ Ž r `Œ` ‚ laopA k r is   Ž (r `ƒ` r) `Œ` r¡laopA k r is ¡ Ž r == ‹ r¢laopA k r is anti-symmetric Ž (r `` ‹ r) `Œ` ‚£laopA k r is £ Ž (r `` ‚) == ~¤laopA k r is ¤ Ž (r `` ‹ r) == ¥laopA k r is a ¥ Ž ž r &&   r¦laopA k r is a partial-order Ž ¢ r && ¥ r§laopA k r is a linear-order Ž ¤ r && ¦ r¨laopA k r is an ¨ Ž ¡ r && ¥ r©laopA k r is a partial-equivalence Ž ¦ r && ¨ rªlaopA k r is ª or regular wherever r `ƒ` ‹ r `ƒ` r == r«laopRelational pairing.DNOTE: That this is not a true categorical product, see for instance:  | ¬ `ƒ` « a b `Œ` a « a b  = | | ­ `ƒ` « a b `Œ` b Emphasis on the Œ. « r s `ƒ` f == « (r `ƒ ` f) (s `ƒ` f) (R ® S) `ƒ` « p q == « (r `ƒ ` p) (s `ƒ` q) ‹ (« r s) `ƒ` « x y == (‹ r `ƒ` x) `` (‹ s `ƒ` y) ¯ (« r s) (« t v) == « (¯ r t) (¯ s v) ¬laop-Relational pairing first component projection ¬ `ƒ` « r s `Œ` r ­laop.Relational pairing second component projection ­ `ƒ` « r s `Œ` s ®laopRelational pairing functor r ® s == « (r `ƒ ` p1) (s `ƒ ` p2) (r ® s) `ƒ` (p ® q) == (r `ƒ` p) ® (s `ƒ` q) ¯laopRelational coproduct.  | ¯ a b `ƒ` ° == a ¯ a b  = | | ¯ a b `ƒ` ± == b  ¯ r s `ƒ` ‹ (¯ t u) == (r `ƒ` ‹ t) `` (s `ƒ` ‹ u) ¯ (« r s) (« t v) == « (¯ r t) (¯ s v) °laop.Relational coproduct first component injection ’ ° `` ’ ± == ‚ ° `ƒ` ± = ~ ±laop/Relational coproduct second component injection ’ ° `` ’ ± == ‚ ° `ƒ` ± = ~ ²laopRelational coproduct functor. r ² s == ¯ (° `ƒ` r) (± `ƒ` s) ³laop Relational ³DEvery n-ary relation can be expressed as a binary relation through 'trans'/'untrans'U; more-over, where each particular attribute is placed (input/output) is irrelevant.´laop Relational ´DEvery n-ary relation can be expressed as a binary relation through 'trans'/'untrans'U; more-over, where each particular attribute is placed (input/output) is irrelevant.µlaopTransforms predicate p into a correflexive relation. µ (e True) == ‚ µ (e False) == ~ µ q `ƒ` µ p == µ q `` µ p ¶laopEqualizes functions f and g . That is, ¶ f g, is the largest coreflexive that restricts g so that f and g yield the same outputs. ¶ r r == ‚ ¶ ( True) ( False) == ~ ·laopRelational conditional guard. · p = ± `ˆ` ° `ƒ` µ p ¸laop"Relational McCarthy's conditional.¹laopRelational domain.For injective relations, ¹ and ‘nel coincide, since ‘ r `Œ` ‚ in such situations.ºlaopRelational range.For functions, º and ’ (image) coincide, since ’ f `Œ` ‚ for any f.»laopRelation pretty printing¼laopRelation pretty printing¾laop#It isn't possible to implement the f% function so it's implementation is b . However ƒZ can be and this partial class implementation exists just to make the code more readable. Please use ‚ instead.^cdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼`klmjihgfedcnopqrstvwxyz{|}u~€‹ŒŽ‘’•–”—™˜šœ›¹º“„…†‡ˆ«¬­®¯°±²³´žŸ ¡¢£¤¥¦§¨©ª¶µ·¸‚ƒvw‰Š»¼q3s2®4²5(c) Armando Santos 2019-2020armandoifsantos@gmail.com experimentalNoneâä^cdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼`klmjihgfedcnopqrstvwxyz{|}u~€‹ŒŽ‘’•–”—™˜šœ›¹º“„…†‡ˆ«¬­®¯°±²³´žŸ ¡¢£¤¥¦§¨©ª¶µ·¸‚ƒvw‰Š»¼(c) Armando Santos 2019-2020armandoifsantos@gmail.com experimentalNone&',.;<=>?@AHSUVXkÛ1ÄlaopOne type aliasÅlaopZero type aliasÍlaopDConstraint type synonyms to keep the type signatures less convolutedÐlaopEmpty matrix constructorÑlaopUnit matrix constructorÒlaopMatrix Junc constructorÓlaopMatrix Junc constructorÔlaopMatrix Split constructorÕlaopMatrix Split constructorÖlaop$Functor instance equivalent function×laop Applicative instance equivalent unit function,Ølaop Applicative instance equivalent unit function,ÙlaopMonad instance equivalent g function,Úlaop+Monad instance equivalent '(>>=)' function,ÛlaopiBuild a matrix out of a list of list of elements. Throws a runtime error if the dimensions do not match.ÜlaopTMatrix builder function. Constructs a matrix provided with a construction function.Ýlaop!Constructs a column vector matrixÞlaopConstructs a row vector matrixßlaop6Lifts functions to matrices with arbitrary dimensions.ONOTE: Be careful to not ask for a matrix bigger than the cardinality of types a or b allows.àlaop5Lifts functions to matrices with dimensions matching a and b cardinality's.álaop*Lifts relation functions to Boolean Matrixâlaop1Converts a matrix to a list of lists of elements.ãlaop(Converts a matrix to a list of elements.älaop3The zero matrix. A matrix wholly filled with zeros.ålaop2The ones matrix. A matrix wholly filled with ones.Also known as T (Top) matrix.ælaopLThe constant matrix constructor. A matrix wholly filled with a given value.çlaopThe T (Top) row vector matrix.èlaopPoint constant relationélaopIdentity matrixêlaop?Matrix composition. Equivalent to matrix-matrix multiplication.QThis definition takes advantage of divide-and-conquer and fusion laws from LAoP.ëlaop$Biproduct first component projectionìlaop%Biproduct second component projectionílaop#Biproduct first component injectionîlaop$Biproduct second component injectionïlaopObtain the number of rows. NOTE: The `I constaint is needed in order to obtain the dimensions in constant time.TODO: A ï! function that does not need the `) constraint in exchange for performance.ðlaopObtain the number of columns. NOTE: The `I constaint is needed in order to obtain the dimensions in constant time.TODO: A ð! function that does not need the `) constraint in exchange for performance.ñlaop9Matrix coproduct functor also known as matrix direct sum.òlaop5Khatri Rao product first component projection matrix.ólaop6Khatri Rao product second component projection matrix.ôlaop7Khatri Rao Matrix product also known as matrix pairing.DNOTE: That this is not a true categorical product, see for instance:  | kp1 ê8 khatri a b == a khatri a b ==> | | kp2 ê khatri a b == b Emphasis on the implication symbol.õlaop6Matrix product functor also known as kronecker productölaopMatrix "abiding" followin the 'Junc'-'Split' abide law.Law: Junc (Split a c) (Split b d) == Split (Junc a b) (Junc c d) ÷laopMatrix "abiding" followin the 'Split'-'Junc' abide law.Law: Split (Junc a b) (Junc c d) == Junc (Split a c) (Split b d) ølaopMatrix transposition.ùlaopSelective functors selectQ operator equivalent inspired by the ArrowMonad solution presented in the paper.úlaop6McCarthy's Conditional expresses probabilistic choice.ûlaopMatrix pretty printerülaopMatrix pretty printerýlaop#It isn't possible to implement the f% function so it's implementation is b . However êZ can be and this partial class implementation exists just to make the code more readable. Please use é instead.=ÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûü=ÎÏÍÌËÊÉÈÇÆÅÄÐÑÒÔÛâãÜÞÝäåçèæÖרùÙÚðïøúö÷ÕëìÓíîñõòóôéêßàáûüÓ3Õ2ñ5õ4(c) Armando Santos 2019-2020armandoifsantos@gmail.com experimentalNone&',.;<=>?@AHSUVXk*L laopDConstraint type synonyms to keep the type signatures less convoluted)laopCoproduct Bifunctor*laop"Khatri Rao Product and projections-laopProduct Bifunctor (Kronecker).laopMatrix abide Junc Split/laopMatrix abide Split Junc0laopMatrix transposition5laop#It isn't possible to implement the f% function so it's implementation is b . However "Z can be and this partial class implementation exists just to make the code more readable. Please use ! instead.6      !"#$%&'()*+,-./012346      ('012./#$%&)-*+,!"3432)5-4None&',.;<>HSXk< @laopDConstraint type synonyms to keep the type signatures less convolutedAlaopUType synonym for column vector matrices. This represents a probability distribution.Claop"Type synonym for probability valueDlaopFunctor instanceElaopApplicative/Monoidal instance unit functionFlaopApplicative/Monoidal instance mult functionGlaopSelective instance functionHlaopRChooses which of the two given effectful functions to apply to a given argument; Ilaop=Branch on a Boolean value, skipping unnecessary computations.JlaopMonad instance g functionKlaopMonad instance '(>>=)' functionLlaop%Extract probabilities given an Event.Mlaop#Constructs a Bernoulli distributionNlaop-Creates a distribution given a shape functionOlaop Constructs a Linear distributionPlaop"Constructs an Uniform distributionQlaop/Constructs an Negative Exponential distributionRlaop!Constructs an Normal distributionSlaop Transforms a A into a list of pairs.TlaopPretty a distributionUlaopPretty Print a distribution;<=>?@ABCDEFGHIJKLMNOPQRSTUABC@?>=<;DEFGHIJKLMNOPQRSTU (c) Armando Santos 2019-2020armandoifsantos@gmail.com experimentalNone>µ;<=>?@ABCDEFGHIJKMNOPQRSTUABC@?>=<;DEFGHIJKMNOPQRSTU Safe?Ãhijklmnop    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx./0123%y78`9:Tz{;<>|?@[\]}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡ABK¢CDG£¤¥¦§Q¨©RSª«¬­®¯°+±nopqrstu)²./0123³´µ¶·%45678`9:;<=>|?@ABCDEFGHIJKLMN¸QRSembcadn¹pºqr»stu)²./0123%456789:;<=>?@ABCDEFGHIJKLMNOQRS¼mbcadnpqrsu½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙרÚÛÜÝu×Þß×àá×âã×äåæÛÜç×èé×èê×èë ì í î ï ð ñ ò óôlaop-0.1.0.4-inplaceLAoP.Utils.InternalLAoP.Matrix.InternalLAoP.Relation.InternalLAoP.Matrix.TypeLAoP.Matrix.NatLAoP.Dist.Internal LAoP.Utils LAoP.Relation LAoP.Dist Paths_laopListLNaturalNatnat coerceNat coerceNat2 coerceNat3 $fEnumEither$fBoundedEither $fEnum(,) $fEnumNatural$fBoundedNatural $fNumNatural $fEnumList $fBoundedList $fShowNatural $fReadNatural $fEqNatural $fOrdNatural$fNFDataNatural$fGenericNatural$fEqList $fShowList $fReadList FromLists fromLists NormalizeFromNatCountMatrixEmptyOneJuncSplitemptyonejunc|||split=== matrixBuildercolrowfromFfromF'toListstoListzerosonesconstantbangidentitycompp1p2i1i2rowscolumns-|-kp1kp2khatri><abideJSabideSJtrselectbranchcondpretty prettyPrinttoBoolfromBoolnegateMorMandMsubMcompReldivRdivLdivSfromFRel fromFRel'toRel $fOrdMatrix $fNumMatrix $fEqMatrix$fNFDataMatrix$fCategoryTYPEMatrix$fFromListseEitherEither$fFromListse()Either$fFromListse()Either0$fFromListseEither()$fFromListseEither()0$fFromListse()()$fFromListseVoidVoid $fShowMatrixTrivialPTrivialLiftable FromListsNCountableDimensionsN CountableNCountableDimensions CountableRelationRBooleanrelationBuilderptbelongspointshrunkBy overriddenBypointAp pointApBoolconvsseimpliesiff intersectionunionkerimg divisionFsimple injectiveentire surjectivefunctionrepresentation abstraction surjection injection bijection reflexive coreflexive transitive symmetric antiSymmetric irreflexive connectedpreorder partialOrder linearOrder equivalencepartialEquivalence difunctionalsplitReitherRtransuntranspredR equalizerguarddomainrange $fNumRelation$fCategoryTYPERelation$fShowRelation $fEqRelation $fOrdRelation$fNFDataRelation$fReadRelationZeroMfmapMunitMmultMreturnMbindMselectMTrivialE FromListsNz CountableNz$fCategoryNatMatrixDistDProbfmapDunitDmultDselectDbranchDifDreturnDbindD??chooseshapelinearuniformnegExpnormaltoValues prettyDistprettyPrintDist $fShowDist $fNumDist$fEqDist $fOrdDist $fNFDataDistbaseGHC.EnumEnumBoundedghc-prim GHC.TypesInt GHC.GenericsGeneric GHC.TypeNatsKnownNatControl.CategoryCategoryGHC.Err undefinedfromRelBoolGHC.Baseconstidreturnversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName