úÎR0LÓ@      !"#$%&'()*+,-./0123456789:;<=>? non-portable experimental jed@59A2.org@)Hack so that norms have a sensible type. GWe need this type class to distinguish between different tuples of Ix. I There are Shapable instances for homogenous Int tuples, but may Haddock  doesn' t see them. JAbsolutely equivalent representation, but used for the mutable interface. The immutable array type. 1The pointer to the array contents is obtained by  .  The idea is similar to @ (used internally here). 9 The pointer should be used only during execution of the AB action / retured by the function passed as argument to  . 2If you want to use it afterwards, ensure that you   touchCArray$ after the last use of the pointer, & so the array is not freed too early.  Construct a   from an arbitrary @ . It is  the caller'$s responsibility to ensure that the @ points to 8 an area of memory sufficient for the specified bounds. 9Hackish way to get the zero element for a Storable type. IO(1) reshape an array. The number of elements in the new shape must not L exceed the number in the old shape. The elements are in C-style ordering. 2O(1) make a rank 1 array from an arbitrary shape.  It has the property that '&reshape (0, size a - 1) a == flatten a'.  Determine the rank of an array. 'Canonical representation of the shape.  The following properties hold:  'length . shape = rank'  'product . shape = size' CHow much the offset changes when you move one element in the given 2 direction. Since arrays are in row-major order, 'last . shapeToStride = const 1' !!Number of elements in the Array. "EGeneric slice and map. This takes the new range, the inverse map on L indices, and function to produce the next element. It is the most general  operation in its class. #Less polymorphic version. $EPerform an operation on the elements, independent of their location. %Less polymorphic version. &More polymorphic version of C. '/More friendly sub-arrays with element mapping. (Less polymorphic version. )+Strided sub-array without element mapping. *Less polymorphic version. ++Contiguous sub-array with element mapping. ,Less polymorphic version. -.Contiguous sub-array without element mapping. .Less polymorphic version. /+In-place map on CArray. Note that this is IN PLACE so you should not I retain any reference to the original. It flagrantly breaks referential  transparency! 012&p-norm on the array taken as a vector 3D2-norm on the array taken as a vector (Frobenius norm for matrices) 4(Sup norm on the array taken as a vector 5Polymorphic version of amap. 60Equivalent to amap. Here for consistency only. 7Polymorphic 2-array lift. 8Less polymorphic version. 9Polymorphic 3-array lift. :Less polymorphic version. ;This variant of D is quite mind-bogglingly unsafe. It M unstitches the dependency chain that holds the IO monad together and breaks K all your ordinary intuitions about IO, sequencing and side effects. Avoid / it unless you really know what you are doing. BIt is only safe for operations which are genuinely pure (not just E externally pure) for example reading from an immutable foreign data H structure. In particular, you should do no memory allocation inside an  ;4 block. This is because an allocation is a constant M and is likely to be floated out and shared. More generally, any part of any G IO action that does not depend on a function argument is likely to be 6 floated to the top level and have its result shared. <It is more efficient because in addition to the checks that  unsafeDupablePerformIO/ omits, we also inline. Additionally we do not K pretend that the body is lazy which allows the strictness analyser to see E the strictness in the body. In turn this allows some re-ordering of 0 operations and any corresponding side-effects. GWith GHC it compiles to essentially no code and it exposes the body to  further inlining. <NAllocate an array which is 16-byte aligned. Essential for SIMD instructions. =FAllocate memory which is 16-byte aligned. This is essential for SIMD O instructions. We know that mallocPlainForeignPtrBytes will give word-aligned L memory, so we pad enough to be able to return the desired amount of memory  after aligning our pointer. >%Make a new CArray with an IO action. ?C  !"#$%&'()*+,-./0EFG123456789:;<=>?@   !"#$%&'()*+,-./0123456789:;<=>?@  !"#$%&'()*+,-./0123456789:;<=>? non-portable experimental jed@59A2.orgHIJKLMNOPQRSTUVWXYZ[   non-portable experimental jed@59A2.org4HIJKLC\]^_`abcdefgh !"#$%&'()*+,-.23456789:>! >!"#$%&'()*+,-.56789:234i        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGEFGHIJBKLMNOBPQBPRBPSBPTBPUHIVHIWHIXHIYHIZHI[HI\HI]HI^HI_HI`HIaHIbHIcHIdHIeHIfHIgHIhHIiHIjHIkHIlHImHInHIoHIpBPqr carray-0.1.1Data.Array.CArray.BaseData.Array.IOCArrayData.Array.CArrayAbsabs_ShapablesRanksShapesBoundsIOCArrayCArray withCArray withIOCArray touchIOCArrayunsafeForeignPtrToCArrayunsafeForeignPtrToIOCArraycopyfreezeIOCArrayunsafeFreezeIOCArray thawIOCArrayunsafeThawIOCArrayzeroElemunsafeArrayCArrayunsafeReplaceCArrayunsafeAccumCArrayunsafeAccumArrayCArrayeqCArray cmpCArray cmpIntCArrayreshapeflattenrankshape shapeToStridesize ixmapWithIndP ixmapWithInd ixmapWithP ixmapWithixmapPsliceStrideWithPsliceStrideWith sliceStrideP sliceStride sliceWithP sliceWithslicePslicemapCArrayInPlaceindexesoffsetsnormpnorm2normSup liftArrayP liftArray liftArray2P liftArray2 liftArray3P liftArray3unsafeInlinePerformIOmallocForeignPtrArrayAlignedmallocForeignPtrBytesAligned createCArrayunsafeCreateCArraybaseGHC.ForeignPtr ForeignPtrghc-prim GHC.TypesIO array-0.3.0.1Data.Array.BaseixmapGHC.IOunsafePerformIOoffsetShapeFromThenTooffsetShapeFromTooffsetShapeFromTo'GHC.ArrIxrangeindexinRange rangeSize unsafeThawthaw unsafeFreezefreeze mapIndicesmapArray getAssocsgetElems writeArray readArray newListArray newArray_newArray getBoundsMArrayamapaccum// accumArrayassocselemsindices! listArrayarrayboundsIArrayArray