eT      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  NoneZThis data type is for parameters of parameterized signal generators and causal processes. 0It is better than using plain functions of type p -> a &since it allows for numeric instances and we can make explicit, !whether a parameter is constant. 1We recommend to use parameters for atomic types. Although a parameter of type  T p (a,b) is possible, .it means that the whole parameter is variable .if only one of the pair elements is variable. %This way you may miss optimizations.  The call  value param v requires that v represents the same value as valueTupleOf (get param p) for some p. However v) might be the result of a load operation and param might be a constant. )In this case it is more efficient to use "valueTupleOf (get param undefined) 5since the constant is translated to an LLVM constant 'that allows for certain optimizations. GThis is the main function for taking advantage of a constant parameter in low-level implementations. JFor simplicity we do not omit constant parameters in the parameter struct Ksince this would mean to construct types at runtime and might become ugly. Instead we just check using value& at the according places in LLVM code  whether a parameter is constant 7and ignore the parameter from the struct in this case. -In many cases there will be no speed benefit ;because the parameter will be loaded to a register anyway. 9It can only lead to speed-up if subsequent optimizations %can precompute constant expressions. Another example is 9 where a loop with constant loop count can be generated. JFor small loop counts and simple loop bodies the loop might get unrolled. /This function provides specialised variants of  and value, %that use the unit type for constants -and thus save space in parameter structures. Useful for combining T p a and T p b to  T p (a,b) using  liftA2 (,). &However, we do not recommend to do so 2because the result parameter can only be constant if both operands are constant. Useful for splitting  T p (a,b) into T p a and T p b using fmap fst and fmap snd. arrA is useful for lifting parameter selectors to our parameter type $without relying on the constructor. .> can be used for fetching a parameter from a super-parameter.      None Analogous to .  A nested %. 4 Analogus to . : !"#$%&'()*+,-./0123456789:;<. !"#$%&'()*+,-./0123456789:;<. !"#$%&'()*+,-./0123456789:;<0 !"#$%&'()*+,-./0123456789:;<NoneE Result is (size, flattenedIndex).  size must equal the result of C. 1 We use this for sharing intermediate results. =>?@ABCDEFGHIJKL=>?@ABCDEFGHIJKLGHIJK@ABCDEF=>?L=>?@ABCDEFGHIJKLNoneNoneM<This class allows to implement functions without parameters *for both simple and parameterized arrays. ]7Use this for combining several dimension manipulators. E.g.  < apply (passAny $:. pick 3 $:. pass $:. replicate 10) array The constraint (Process proc0, Process proc1) is a bit weak. 2We like to enforce that the type constructor like Slice.T is the same in proc0 and proc1", and only the parameters differ. &Currently this coherence is achieved, *because we only provide functions of type proc0 -> proc1 with this condition. MNOPQRSTUVWXYZ[\]MNOPQRSTUVWXYZ[\]MNOPQRSTUVWXYZ[\]None`This is between _ and a. )You can access the shapes of two arrays, %but only the content of one of them. LThis is necessary if the second array contributes only a virtual dimension. ^_`ab^_`ab^_`ab^_`abNonecdefghijMNOPQRSTUVWXYZ[\cdefghijQMNOPRSTUVWcXYZ[defghi\jcdefghijNoneq=The symbolic array is only valid inside the enclosed action. klmnopqrstu klmnopqrstu klmnopqrstu klmnopqrstuNonevwxyz{|}~vwxyz{|}~vwxyz{|}~None vwxyz{|}~ v~wxyz{|} None kmo kmmo None  Nonep      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMK      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNoneThis is essentially a _. Like Any in  accelerate. Like All in  accelerate. Like Int in  accelerate/slice. Like Int in  accelerate/ replicate. NO]]NO None PQR]]PQR None STUVWX]] STUVWXY !"#$%&'()*+,,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\P'()]^_`abcdefghi^jkdbjlmn678o]]^pqrstuv]_bcefhowjl x ` y s u v z { | | } ~  Q    ~     P Z W X  ^ } [      "]o]g                             ! "             Y T  V                     knead-0.2Data.Array.Knead.ParameterData.Array.Knead.Expression#Data.Array.Knead.Index.Nested.Shape Data.Array.Knead.Simple.SymbolicData.Array.Knead.Simple.Slice&Data.Array.Knead.Simple.ShapeDependent Data.Array.Knead.Simple.Physical'Data.Array.Knead.Parameterized.Symbolic'Data.Array.Knead.Parameterized.Physical!Data.Array.Knead.Index.Linear.IntData.Array.Knead.Index.LinearData.Array.Knead.Simple.Fold$Data.Array.Knead.Parameterized.Slice MultiValuemodifyMultiValueData.Array.Knead.CodeData.Array.Knead.Simple.Private&Data.Array.Knead.Parameterized.PrivateTunnelTVariableConstantget valueTuple multiValue genericValue withTuple withMultiwithtunnelword32$# Decompose decomposeComposeComposedcomposeValuelift0lift1lift2lift3lift4ExpunExpliftMliftM2liftM3unliftM1unliftM2unliftM3minmaxzipzip3zip4unzipunzip3unzip4fstsndmapFstmapSndswapmodifyMultiValue2modifyMultiValueMmodifyMultiValueM2modifymodify2unitzeroaddsubmulidiv fromInteger'Scalarscalar zeroIndexCIndex intersectCodesizeCodesizeflattenIndexRecloopvalue paramWithload intersect flattenIndex loopPrimitiveArrayshape!the fromScalarfillgather backpermute2idmap mapWithIndexfold1$:. backpermutebackpermuteExtrazipWithzipWith3zipWith4fold1AllbufferfromListvectorFromListrenderscanl1scatterpermuteextendParameterfeed renderShapeSingle switchSingleIntconsdeconsStructShapeCons:.Zswitch switchIntindex#:.headtailswitchRloadMultiValuestoreMultiValuepeekpoke computeSizeconstantLinearapplypassAnypasspickextrudefoldbaseGHC.Listdrop$fApplicativeT $fFunctorT$fArrowT $fCategoryT $fFractionalT$fNumT$fMonadTllvm-extra-0.6.0.1LLVM.Extra.Multi.Value$fFractionalExp$fNumExp$fDecompose(,,,)$fCompose(,,,)$fDecompose(,,) $fCompose(,,)$fDecompose(,) $fCompose(,)$fDecomposeAtom $fComposeExp $fValueExp$fValueT$fC(,,)$fC(,) $fCWord64 $fCWord32 $fScalar()$fC() getElementPtrcompileProcessCodeVal fold1Code$fCArrayImporter callRenderer callShaper materializecore createContext deleteContextlift paramArray createPlain deletePlain combineCreate combineDelete callScatterercallThe $fRealInt $fAdditiveInt$fCInt $fSingleIntLooprunLoopPhisrunPhisAddPhis runAddPhis getConstant ComputeSizerunComputeSizeSizerunSizeStorerunStoreLoadrunLoadPokerunPokePeekrunPeekRankrunRank FlattenIndexrunFlattenIndexReprTagUnwrap Decomposed PatternTupleIndexTagShapeTagStructFieldsProp MakeValue runMakeValueOp2runOp2 SwitchInt runSwitchInt_value_structFieldsPropstructFieldsPropFwithStructFieldsPropFFstructFieldsRecsuccStructFieldsPropzrank castPtrValuestoreaddPhisphis$fCT$fCT0$fCT1 $fStorableT $fDecomposeT $fCompose:.$fDecomposetag:.$fDecomposetagAtom$fC:.$fCZ $fProcessTfold1CodeLinear_core_createContext_deleteContext