!S<      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           (c) Artem ChirkinBSD3None dimensions+A small core plugin to make GHC think that Snoc is injective (c) Artem ChirkinBSD3Safe -.HUV_& dimensions#Appending a list on the other side.&(c) Artem ChirkinBSD3None &',.>HUVX!' dimensions3Comparison of type-level naturals, as a constraint.( dimensionsSingleton-style version of ]. Pattern-match againts its constructor to witness the result of type-level comparison., dimensionsConvert a type-level Nat into a type-level Symbol.- dimensionsfPattern-match against the result of this function to get the evidence of comparing type-level Nats.. dimensionsiPattern-match against the result of this function to get the evidence of comparing type-level Symbols.( '()*+,-.( , '()*+-. (c) Artem ChirkinBSD3None&',-.=>?HUVXk:/ dimensions/Represent a triple of lists forming a relation (as ++ bs) ~ asbs0 dimensions'Check if an item is a member of a list.1 dimensions/Map a functor over the elements of a type list.2 dimensions=All elements of a type list must satisfy the same constraint.3 dimensions%Infix-style synonym for concatenation4 dimensionsSynonym for a type-level Snoc.5 dimensionsSynonym for a type-level Cons.6 dimensionsNumber of elements in a list.7 dimensions0Returns the elements of a list in reverse order.8 dimensionsRemove suffix bs from a list asbs if bs is a suffix; fail otherwise.9 dimensionsRemove prefix as from a list asbs if as is a prefix; fail otherwise.: dimensionsAppend two lists.; dimensions Drop n xs drops up to n elements of xs.< dimensions Take n xs( returns the prefix of a list of length max n (length xs).= dimensionsAExtract all but last elements of a list, which must be non-empty.> dimensions<Extract the last element of a list, which must be non-empty.? dimensionsGExtract the elements after the head of a list, which must be non-empty.@ dimensions=Extract the first element of a list, which must be non-empty.A dimensions Appending a list, represents an Op counterpart of (':).B dimensionsEmpty list, same as '[].C dimensionsDerive  ConcatList given ConcatD dimensionsDerive  ConcatList given  StripSuffixE dimensionsDerive  ConcatList given  StripPrefixF dimensionsGiven a Typeable+ list, infer this constraint for its parts.&/0123456789:;<=>?@ABCDEF345BA&@?>=:987<;6210/DECF354655(c) Artem ChirkinBSD3None%&',-.12=>?@AEFHSUVXgkgqJ dimensions]Representable type lists. Allows getting type information about list structure at runtime.K dimensionsGet type-level constructed listL dimensions;A list of dicts for the same constraint over several types.M dimensionsSame as #O, but allows to separate constraint function from the type it is applied to.O dimensionsA list of type proxiesP dimensionsType-indexed listQ dimensionsReverse a typed listR dimensions3Constructing a type-indexed list from the other endS dimensions5Constructing a type-indexed list in the canonical wayT dimensions Constructing a type-indexed listU dimensions"Zero-length type list; synonym to V.V dimensionsZero-length type listW dimensionsPattern matching against this allows manipulating lists of constraints. Useful when creating functions that change the shape of dimensions.X dimensions%Pattern matching against this causes Jc instance come into scope. Also it allows constructing a term-level list out of a constraint.i dimensionsZReturns two things at once: (Evidence that types of lists match, value-level equality).j dimensions,Map a function over contents of a typed listk dimensionsGet a constructible O from any other P/; Pattern matching agains the result brings J constraint into the scope:  case types ts of TypeList -> ...l dimensions Construct a  TypeList xs if there is an instance of  Typeable xs around.This way, you can always bring J* instance into the scope if you have a  instance.m dimensionsIf all elements of a  TypedList are Typeable-, then the list of these elements is also Typeable.n dimensionsGeneric show function for a  TypedList.o dimensionsGeneric show function for a  TypedList.p dimensionsGeneric read function for a  TypedListE. Requires a "template" to enforce the structure of the type list.q dimensionsGeneric read function for a  TypedList of unknown length. dimensions8This function does GHC's magic to convert user-supplied K& function to create an instance of Jd typeclass at runtime. The trick is taken from Edward Kmett's reflection library explained in Chttps://www.schoolofhaskell.com/user/thoughtpolice/using-reflectionr dimensionsTerm-level structure of a TypedList f xs$ is fully determined by its type  Typeable xs . Thus, gunfold! does not use its last argument (Constr<) at all, relying on the structure of the type parameter.n dimensionsOverride cons symbol dimensionsHow to show a single elemento dimensionsHow to show a single elementp dimensionsOverride cons symbol dimensionsHow to read a single element dimensions(Enforce the type structure of the resultq dimensionsHow to read a single element dimensionsConsume the resultA&/0123456789:;<=>?@ABCDEFJKLMNOPVTUXWSRQYZ[\]^_`abcdefghijklmnopq0PVTUXWSRQVTUXWSRQJKMNLOklmedYZ[`a\]_^cghifbjnopqT5(c) Artem ChirkinBSD3None!%&'-.24567=>?@AFHMSUVXgktl z dimensions"A tuple indexed by a list of types{ dimensions#This is an almost complete copy of    by (c) Andy Gill 2001.~ dimensions Constructing a type-indexed list dimensions Constructing a type-indexed list dimensionsGrow a tuple on the left O(1). dimensionsAGrow a tuple on the left while evaluating arguments to WHNF O(1). dimensionsMGrow a tuple on the right. Note, it traverses an element list inside O(n). dimensionspGrow a tuple on the right while evaluating arguments to WHNF. Note, it traverses an element list inside O(n). dimensions5Lexicorgaphic ordering; same as normal Haskell lists.PVT~UXSRQz{|}{|}zPVT~UXSRQVT~UXSRQ~555555(c) Artem ChirkinBSD3None!%&'-.24567=>?@AFHMSUVXgk  dimensions"A tuple indexed by a list of types dimensions#This is an almost complete copy of    by (c) Andy Gill 2001. dimensions Constructing a type-indexed list dimensions Constructing a type-indexed list dimensionsGrow a tuple on the left O(1). dimensionsAGrow a tuple on the left while evaluating arguments to WHNF O(1). dimensionsMGrow a tuple on the right. Note, it traverses an element list inside O(n). dimensionspGrow a tuple on the right while evaluating arguments to WHNF. Note, it traverses an element list inside O(n). dimensions5Lexicorgaphic ordering; same as normal Haskell lists.PVTUXSRQPVTUXSRQVTUXSRQ555555(c) Artem ChirkinBSD3NonepPUQSRVTX~z{|}(c) Artem ChirkinBSD3None %&',-.2=>?@AEFHISUVX_gk]G dimensions3Singleton type to store type-level dimension value.On the one hand, it can be used to let type-inference system know relations between type-level naturals. On the other hand, this is just a newtype wrapper on the Word type.Usually, the type parameter of Dim is either Nat or XNat=. If dimensionality of your data is known in advance, use NatY; if you know the size of some dimensions, but do not know the size of others, use XNats to represent them.I dimensions Similar to  from , but returns . dimensions$Know the structure of each dimension dimensions Constrain Nat dimensions hidden behind XNats. dimensionsMap XDims onto Dims (injective) dimensionsMap Dims onto XDims (injective) dimensions Get a minimal or exact bound of Dims.This is a plural form of . BoundedDims is a somewhat weaker form of  Dimensions:It is defined for both [Nat] and [XNat]; Instance of  Dimensions ds always implies BoundedDims ds. dimensionsMinimal or exact bound of Dims. This is a plural form of . dimensionsPlural form for  dimensionsPlural form for .Given a Dims ys@, test if its runtime value satisfies constraints imposed by BoundedDims ds!, and returns it back coerced to Dims ds on success.This function allows to guess safely individual dimension values, as well as the length of the dimension list. It returns Nothing if ds and xds5 have different length or if any of the values in ys+ are less than the corresponding values of ds. dimensions'BoundedDims means every element dim is  BoundedDim/ and also the length of a dim list is known.Enforcing this as a superclass would complicate instance relations, so it is better to provide these dictionaries on-demand. dimensionsPut runtime evidence of 2 value inside function constraints. Similar to  or , but for lists of numbers.Note, kind of the  Dimensions list is always Nat, restricted by KnownDim being also Nat3-indexed (it is impossible to create a unique KnownDim (XN m) instance). dimensionsFGet dimensionality of a space at runtime, represented as a list of G.0Note, this function is supposed to be used with TypeApplications. For example, you can type::set -XTypeApplications:set -XDataKinds:t dims @'[17, 12]!dims @'[17, 12] :: Dims '[17, 12] :t dims @'[]dims @'[] :: Dims '[]:t dims @(Tail '[3,2,5,7])*dims @(Tail '[3,2,5,7]) :: Dims '[2, 5, 7] dimensionsTSame as SomeNat, but for Dimensions: Hide all information about Dimensions inside dimensions/Figure out whether the type-level dimension is  or 0. Useful for generalized inference functions. dimensionsGADT to support : type class. Match against its constructors to know if k is Nat or XNat dimensions Working on Nat. dimensions Working on XNat. dimensionsLConstraints given by an XNat type on possible values of a Nat hidden inside. dimensionsFind out the type of  constructor dimensions.Pattern-match against this to out the type of  constructor dimensions"Get a minimal or exact bound of a Dim.To satisfy the  BoundedDim means to be equal to N n or be not less than XN m. dimensionsMinimal or exact bound of a DimQ. Useful for indexing: it is safe to index something by an index less than  DimBound n (for both Nat and Xnat indexed dims). dimensionsGet such a minimal Dim (DimBound n), that Dim n& is guaranteed to be not less than dimBound if n ~ XN a, otherwise, the return Dim is the same as n. dimensionsIf the runtime value of Dim y satisfies  dimBound k x, then coerce to Dim x. Otherwise, return Nothing.To satisfy the dimBound means to be equal to N n or be not less than XN m. dimensionsThis class provides the G& associated with a type-level natural.Note, kind of the KnownDim argument is always Nat3, because it is impossible to create a unique KnownDim (XN m) instance. dimensions'Get value of type-level dim at runtime.0Note, this function is supposed to be used with TypeApplications. For example, you can type::set -XTypeApplications:set -XDataKinds :t dim @3dim @3 :: Dim 3:set -XTypeOperators:t dim @(13 - 6)dim @(13 - 6) :: Dim 7 dimensionsType-level dimensionality. dimensionsSame as  dimensionsFind out whether XNat! is of known or constrained type. dimensionsGiven XNat is known dimensionsGiven XNat is constrained unknown dimensionsKnown natural number dimensionsBUnknown natural number, known to be not smaller than the given Nat dimensions6Either known or unknown at compile-time natural number dimensions?An easy way to convert Nat-indexed dims into XNat-indexed dims. dimensionsPattern-matching against this constructor reveals Nat-kinded list of dims, pretending the dimensionality is known at compile time within the scope of the pattern match. This is the main recommended way to get F at runtime; for example, reading a list of dimensions from a file.,In order to use this pattern, one must know XNat8 type constructors in each dimension at compile time.  dimensions O(Length ds)0 A heavy weapon against all sorts of type errors  dimensionsO(1)4 Pattern-matching against this constructor brings a  instance into the scope. Thus, you can do arbitrary operations on your dims and use this pattern at any time to reconstruct the class instance at runtime.  dimensionsMatch Dim n against a concrete Nat  dimensionsMatch Dim n against a concrete Nat  dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat dimensionsMatch Dim n against a concrete Nat  dimensionsMatch Dim n against a concrete Nat! dimensionsMatch Dim n against a concrete Nat" dimensionsMatch Dim n against a concrete Nat# dimensionsMatch Dim n against a concrete Nat$ dimensionsMatch Dim n against a concrete Nat% dimensions- that is unknown at compile time. Same as f, but for a dimension: Hide dimension size inside, but allow specifying its minimum possible value.& dimensionsStatically known ' dimensions$Match against this pattern to bring  instance into scope.) dimensions Similar to  from , but returns .* dimensions Construct a Dim n if there is an instance of  Typeable n around.+ dimensions Similar to  from ., dimensions% with explicitly-passed constraining Dim to avoid AllowAmbiguousTypes.- dimensions#Decrease minimum allowed size of a  Dim (XN x).. dimensionskWe either get evidence that this function was instantiated with the same type-level numbers, or Nothing.Note, this function works on Nat%-indexed dimensions only, because  Dim (XN x)) does not have runtime evidence to infer x6 and `KnownDim x` does not imply `KnownDim (XN x)`./ dimensionskWe either get evidence that this function was instantiated with the same type-level numbers, or Nothing.0 dimensionsOrdering of dimension values.Note:   forces type parameters to kind *; if you want to compare unknown s, use  instance of G.1 dimensionsOrdering of dimension values.Note:   forces type parameters to kind *; if you want to compare unknown s, use  instance of G.9 dimensionsMinimal runtime Dims dsI value that satifies the constraints imposed by the type signature of Dims ds.: dimensions Construct a Dims ds if there is an instance of  Typeable ds around.; dimensionsDims (ds :: [Nat]) is always Typeable.< dimensions=Convert `Dims xs` to a plain haskell list of dimension sizes O(1). Note, for XNatS-indexed list it returns actual content dimensions, not the constraint numbers (XN m)= dimensions^Convert a plain haskell list of dimension sizes into an unknown type-level dimensionality O(1).> dimensionsProduct of all dimension sizes  O(Length xs).? dimensionsProduct of all dimension sizes  O(Length xs).@ dimensions4Get XNat-indexed dims given their fixed counterpart.A dimensions4Get XNat-indexed dims given their fixed counterpart.B dimensionsDrop the given prefix from a Dims list. It returns Nothing if the list did not start with the prefix given, or Just the Dims after the prefix, if it does.C dimensionsDrop the given suffix from a Dims list. It returns Nothing if the list did not end with the suffix given, or Just the Dims before the suffix, if it does.D dimensionsfWe either get evidence that this function was instantiated with the same type-level Dimensions, or   O(Length xs).E dimensionsfWe either get evidence that this function was instantiated with the same type-level Dimensions, or   O(Length xs).F dimensions Similar to  or  asProxyTypeOf.; to be used on such implicit functions as , dimMax, etc.G dimensions Similar to  asProxyTypeOfH, Give a hint to type checker to fix the type of a function argument. dimensions8This function does GHC's magic to convert user-supplied & function to create an instance of d typeclass at runtime. The trick is taken from Edward Kmett's reflection library explained in Chttps://www.schoolofhaskell.com/user/thoughtpolice/using-reflection '()*+G'&%$#"!    HIJKOP  VTUXSRQdek()*+,-./0123456789:;<=>?@ABCDEFGG'&%$#"!    '&%$#"!    (I)*+./01,-23H45678 ()*+'9P  VTUXSRQ  VTUXSRQ:;<=>?DEFG@ABCJKOked (c) Artem ChirkinBSD3None&',-.27=>?EFHMVXgk9  dimensionskType-level dimensional indexing with arbitrary Word values inside. Most of the operations on it require  constraint, because the Idxs3 itself does not store info about dimension bounds. dimensionsOThis type is used to index a single dimension; the range of indices is from 0 to n-1. dimensionsConvert between  and .GIf the word is outside of the bounds, fails with an error (unless  unsafeindices flag is turned on). dimensionsConvert an arbitrary Word to Idx.GIf the word is outside of the bounds, fails with an error (unless  unsafeindices flag is turned on). dimensionsConvert an arbitrary Word to Idx. dimensionsGet the value of an Idx. dimensions.Show type of Idx (for displaying nice errors). dimensions/Show type of Idxs (for displaying nice errors). dimensionsDWith this instance we can slightly reduce indexing expressions, e.g. +x ! (1 :* 2 :* 4) == x ! (1 :* 2 :* 4 :* U) dimensionsCompare indices by their importance in lexicorgaphic order from the first dimension to the last dimension (the first dimension is the most significant one). Literally, /compare a b = compare (listIdxs a) (listIdxs b)This is the same compare rule, as for *. This is also consistent with offsets: sort == sortOn fromEnum (c) Artem ChirkinBSD3None9 !#"%$&'()*+/0123456789:;<=>?@ABCDEFG'#&%$"!    HIJKOPUQSR  VTXdek()*+,-./0123456789:;<=>?@ABCDEFG !#"%$ !"#$%&'()*+,,-./0122345346347347348349 :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aabcK:UdVefbghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR S T T U V W X Y Z [ \ ] ^ _ ` a b c d e f g hijklmnopqrst u vw)dimensions-2.0.0.0-E3TodFh6CxsCRM2bfCokxEData.Type.LitsNumeric.DimensionsData.Type.ListNumeric.Dimensions.DimNumeric.TypedListNumeric.Tuple.StrictNumeric.Tuple.Lazy Numeric.TupleNumeric.Dimensions.IdxData.Type.List.InjectiveSnocData.Type.List.Internal Data.FunctorIdentityGHCTypeNatsbase GHC.TypeNatsKnownNat GHC.TypeLits KnownSymbolghc-prim GHC.TypesNatSymbol+*^- CmpSymbolCmpNatDivModLog2 TypeError AppendSymbolText:<>::$$:ShowType sameSymbol someSymbolVal symbolVal' symbolVal SomeSymbol ErrorMessagesameNat someNatValnatVal'natValSomeNat2constraints-deriving-1.0.4.0-PkCws50TwT28tChPP8L4ZData.ConstraintmapDict\\DictSub:-Snoc<= SOrderingSLTSEQSGTShowNatcmpNat cmpSymbol ConcatListElemMapAll+++::+LengthReverse StripSuffix StripPrefixConcatDropTakeInitLastTailHeadConsEmptyevConcat evStripSuffix evStripPrefixinferTypeableConsDim minusDimMdimValRepresentableListtListDictListDict1TypeList TypedList:*UEvListconssnocreverseheadtailinitlasttakedroplengthsplitAtorder'orderconcat stripPrefix stripSuffixsameListmaptypes typeablesinferTypeableListtypedListShowsPrecCtypedListShowsPrectypedListReadPrecwithTypedListReadPrec$fDataTypedList$fGenericTypedList $fDataDict1$fRepresentableListk:$fRepresentableListk[] $fShowDict1 $fOrdDict1 $fEqDict1TupleIdrunId:!:$*$*!$*!* $fMonadZipId $fMonadFixId $fMonadId$fApplicativeId $fFunctorId $fFoldableId$fOrd1Id$fEq1Id $fShow1Id $fRead1Id$fShowId$fReadId$fReadTypedList$fShowTypedList$fOrdTypedList $fEqTypedList$fBoundedTypedList$fMonoidTypedList$fSemigroupTypedList$fBitsId $fBoundedId$fDataId$fEnumId$fEqId$fFiniteBitsId $fFloatingId$fFractionalId $fGenericId $fGeneric1Id $fIntegralId $fIsStringId$fIxId $fMonoidId$fNumId$fOrdId$fRealId $fRealFracId $fRealFloatId $fSemigroupId $fStorableId$fTraversableIdtoStrict fromStrictKnownXNatTypes FixedDimsAsDimsAsXDims BoundedDims DimsBound dimsBound constrainDimsinferAllBoundedDims DimensionsdimsSomeDims KnownDimKinddimKindDimKindDimNatDimXNatFixedDim KnownXNatTypexNatType BoundedDimDimBounddimBound constrainDimKnownDimdimDimsSomeDimXNatTypeNtXNtNXNXNatXDims KnownDimsD25D24D23D22D21D20D19D18D17D16D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0DxDnDminDimdimVal' typeableDim someDimVal constrainByrelaxsameDimsameDim' compareDim compareDim'plusDimminusDimtimesDimpowerDimdivDimmodDimlog2DimminDims typeableDimsinferTypeableDimslistDims someDimsValtotalDim totalDim'xDimsxDims'stripPrefixDimsstripSuffixDimssameDims sameDims' inSpaceOf asSpaceOf $fShowDim$fOrdDim $fOrdDim0$fEqDim$fEqDim0 $fDataDim$fOrdTypedList0$fEqTypedList0 $fGenericDim$fClassKnownNatKnownDim $fKnownDim25 $fKnownDim24 $fKnownDim23 $fKnownDim22 $fKnownDim21 $fKnownDim20 $fKnownDim19 $fKnownDim18 $fKnownDim17 $fKnownDim16 $fKnownDim15 $fKnownDim14 $fKnownDim13 $fKnownDim12 $fKnownDim11 $fKnownDim10 $fKnownDim9 $fKnownDim8 $fKnownDim7 $fKnownDim6 $fKnownDim5 $fKnownDim4 $fKnownDim3 $fKnownDim2 $fKnownDim1 $fKnownDim0 $fKnownDimn$fKnownXNatTypeXN$fKnownXNatTypeN$fKnownDimKindXNat$fKnownDimKindNat $fReadDim$fBoundedDimXNatXN$fBoundedDimXNatN$fBoundedDimNatn$fReadSomeDims$fShowSomeDims $fOrdSomeDims $fEqSomeDims $fDimensions:$fDimensions[]$fBoundedDimsXNat:$fBoundedDimsXNat[]$fBoundedDimsNatnsIdxsIdxunsafeIdxFromWord idxFromWord idxToWordlistIdxs idxsFromWords$fNumIdx $fEnumIdx $fBoundedIdx $fShowIdx $fReadIdx$fEnumTypedList$fNumTypedList $fDataIdx $fGenericIdx $fIntegralIdx $fRealIdx $fStorableIdx$fEqIdx$fOrdIdxpluginOrderingData.Typeable.InternalTypeable reifyRepListWord GHC.ClassesOrd GHC.MaybeNothingGHC.BaseconstreifyDim showIdxType showIdxsType