úÎ/¾)„h      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde f g None:DOQRTNoneDQRNoneh   h None:DQR FThis class simplifies untupling of expressions. If you have a function 2g :: ((Exp a, Exp b), Exp (c,d)) -> (Exp e, Exp f) you cannot apply it to an array arr :: Array sh ((a,b),(c,d)) using i . Here, the  function helps: =modify ((expr,expr),expr) g :: Exp ((a,b),(c,d)) -> Exp (e,f)The M-pattern tells, how deep the tuple shall be unlifted. This way you can write: OA.map (Exp.modify ((expr,expr),expr) $ \((a,b), cd) -> g ((a,b), cd)) arr is based on . In contrast to jB it does not only unlift one level of tupels, but is guided by an ;-pattern. In the example I have demonstrated, how the pair (a,b) is unlifted, but the pair (c,d) is not. For the result tuple,  simply calls k. In contrast to j, k7 lifts over all tupel levels until it obtains a single  .-for compatibility with accelerate-utility-0.0  !"#$        !"#$NoneDQR/ sliceVertical would be a simple l. %&'()*+,-./0 %&'()*+,-./0 %&'()*+,-./0 %&'()*+,-./0NoneDQR5dThe outer and innermost dimensions must match. Otherwise you may or may not get out-of-bound errors. 123456789: 123456789: 123456789: 123456789:None9:;DQR=This class is like   but for the ;) environment. It allows you to unlift an ;! of nested tuples into tuples of   and ;1 values. It can be quite handy when working with m and n6. It can also be useful in connection with running an  accelerate& algorithm at a certain backend, like  $. But in this case you might prefer &Data.Array.Accelerate.Utility.Lift.Run.Flike o in the ; environmentGlike p in the ; environment;<=>?@ABCDEFGHIJKLMNOP ;<=@?>ABCDEFGHIJKL=>?@@ABCD;<E HIJKLFG;<=>?@ABCDEFGHIJKLMNOPNone:DQRUIf you have a function: .f :: Exp a -> (Acc b, Acc c) -> (Acc d, Acc e)&you cannot run this immediately using  , since run1" expects a function with a single q parameter and a single q result. Using the Z function you can just run f as is: "with run1 f :: a -> (b,c) -> (d,e)QRSTUVWXYrstuvwxyZ[\]^_`abcd QRSTUXWVYZ UVWXYZQRSTQRSTUVWXYrstuvwxyZ[\]^_`abcd Noneefgefgefgefgz   !"#$%&'()*+,-./0123456789:;0123<5678;== >?@!"#%&-./ABCDE FGHIJKLMNOPQRST U V WXYZ[Y\Y\]YZ^YZ_YZ`YZaYb@Yc=defghijkl-accelerate-utility-1.0-6LLcKZjWAY2LnktPzFBnGo#Data.Array.Accelerate.Utility.Shape!Data.Array.Accelerate.Utility.Ord"Data.Array.Accelerate.Utility.Loop&Data.Array.Accelerate.Utility.Lift.Exp$Data.Array.Accelerate.Utility.Sliced%Data.Array.Accelerate.Utility.Sliced1&Data.Array.Accelerate.Utility.Lift.Acc&Data.Array.Accelerate.Utility.Lift.Run%Data.Array.Accelerate.Utility.ArrangeUnlift!Data.Array.Accelerate.Interpreterrun1Cswitch$fC:.$fCZargmin argminimumargmax argmaximumnestnestLog2ExpUnliftedTupleunliftmodifymodify2modify3modify4expratom unliftPair unliftTripleunliftQuadrupleasExpmapFstmapSndfst3snd3thd3 indexCons$fUnliftComplex $fUnlift:. $fUnlift(,,) $fUnlift(,) $fUnliftExplengthheadtailconsconsExpappend3stack3takedroppadsliceHorizontalsieveappendAccacc singletonthe $fUnliftAccArgumentPackedUnpackedtunnel ArgumentsResultPlainwith1with $fArgument:. $fArgumentZ$fArgument(,,) $fArgument(,) $fArgumentExp $fArgumentAcc$fC(->)$fC(,,)$fC(,)$fCAcc mapWithIndexgatherscatter_nest)accelerate-1.1.1.0-AzKRKrVIGrPBUoMkFIZ7SmData.Array.Accelerate.LanguagemapData.Array.Accelerate.LiftliftreshapeacondawhileunitData.Array.Accelerate.PreludeData.Array.Accelerate.Smartmerge _mergeAcc _mergeExp _mergeExpRsplit _splitAcc _splitExp _splitExpR