úÎ-Õ'ÂQ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPNone=JKNoneNoneQRQRNone3=JK 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 S . 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 TB 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 U. In contrast to T, U7 lifts over all tupel levels until it obtains a single  .-for compatibility with accelerate-utility-0.0 VWXYZ      VWXYZNone=JK) sliceVertical would be a simple [.  !"#$%&'()*  !"#$%&'()*  !"#$%&'()*  !"#$%&'()*None=JK/dThe outer and innermost dimensions must match. Otherwise you may or may not get out-of-bound errors. +,-./01234 +,-./01234 +,-./01234 +,-./01234None234=JK7This class is like   but for the 5) environment. It allows you to unlift an 5! of nested tuples into tuples of   and 51 values. It can be quite handy when working with \ and ]6. 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.@like ^ in the 5 environmentAlike _ in the 5 environment56789:;<=>?@ABCDEF`abc 56789:;<=>?@ABCDEF789:;<=>56? BCDEF@A56789:;<=>?@ABCDEF`abcNone3=JKKIf 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 d parameter and a single d result. Using the P function you can just run f as is: "with run1 f :: a -> (b,c) -> (d,e)GHIJKLMNOefghijklPmnopqrstuv GHIJKLMNOP KLMNOPGHIJGHIJKLMNOefghijklPmnopqrstuvw    !"#$%&'()*+,-./01234)*+,5./01466 789 !#$:;<=>?@ABCDEFGHFIFIJKLMNOFGPFGQFGRFGSFI9MNOTFU6VWXYZ[\]^_`abcdefghaccelerate-utility-0.1!Data.Array.Accelerate.Utility.Ord%Data.Array.Accelerate.Utility.Arrange"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.RunUnlift!Data.Array.Accelerate.Interpreterrun1argmin argminimumargmax argmaximum mapWithIndexgatherscatternestnestLog2ExpUnliftedTupleunliftmodifymodify2modify3modify4expratom unliftPair unliftTripleunliftQuadrupleasExpmapFstmapSndfst3snd3thd3 indexConslengthheadtailconsconsExpappend3stack3takedroppadsliceHorizontalsieveappendAccacc singletontheArgumentPackedUnpackedtunnelC ArgumentsResultPlainwith1with_nest _nestLog2accelerate-0.15.0.0Data.Array.Accelerate.LanguagemapData.Array.Accelerate.Preludelift$fUnliftComplex $fUnlift:. $fUnlift(,,) $fUnlift(,) $fUnliftExpreshapeacondawhileunit $fUnliftAccData.Array.Accelerate.Smartmerge _mergeAcc _mergeExp _mergeExpRsplit _splitAcc _splitExp _splitExpR $fArgument:. $fArgumentZ$fArgument(,,) $fArgument(,) $fArgumentExp $fArgumentAcc$fC(->)$fC(,,)$fC(,)$fCAcc