{-# LANGUAGE UndecidableInstances, IncoherentInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.Repa.Array.Material.Auto.InstList ( A (..) , Name (..) , Array (..)) where import Data.Repa.Array.Material.Auto.Base as A import Data.Repa.Array.Material.Boxed as A import Data.Repa.Array.Meta.Window as A import Data.Repa.Array.Internals.Bulk as A import Data.Repa.Array.Internals.Target as A import Data.Repa.Array.Internals.Layout as A import Control.Monad #include "repa-array.h" ----------------------------------------------------------------------------------------------- [] instance Bulk A a => Bulk A [a] where data Array A [a] = AArray_List !(Array B [a]) layout (AArray_List arr) = Auto (A.length arr) index (AArray_List arr) ix = A.index arr ix {-# INLINE_ARRAY layout #-} {-# INLINE_ARRAY index #-} deriving instance Show a => Show (Array A [a]) instance Bulk A a => Windowable A [a] where window st len (AArray_List arr) = AArray_List (window st len arr) {-# INLINE_ARRAY window #-} instance Target A [a] where data Buffer A [a] = ABuffer_List !(Buffer B [a]) unsafeNewBuffer (Auto len) = liftM ABuffer_List $ unsafeNewBuffer (Boxed len) {-# INLINE_ARRAY unsafeNewBuffer #-} unsafeReadBuffer (ABuffer_List arr) ix = unsafeReadBuffer arr ix {-# INLINE_ARRAY unsafeReadBuffer #-} unsafeWriteBuffer (ABuffer_List arr) ix x = unsafeWriteBuffer arr ix x {-# INLINE_ARRAY unsafeWriteBuffer #-} unsafeGrowBuffer (ABuffer_List arr) bump = liftM ABuffer_List $ unsafeGrowBuffer arr bump {-# INLINE_ARRAY unsafeGrowBuffer #-} unsafeFreezeBuffer (ABuffer_List arr) = liftM AArray_List $ unsafeFreezeBuffer arr {-# INLINE_ARRAY unsafeFreezeBuffer #-} unsafeThawBuffer (AArray_List arr) = liftM ABuffer_List $ unsafeThawBuffer arr {-# INLINE_ARRAY unsafeThawBuffer #-} unsafeSliceBuffer st len (ABuffer_List buf) = liftM ABuffer_List $ unsafeSliceBuffer st len buf {-# INLINE_ARRAY unsafeSliceBuffer #-} touchBuffer (ABuffer_List buf) = touchBuffer buf {-# INLINE_ARRAY touchBuffer #-} bufferLayout (ABuffer_List buf) = Auto $ A.extent $ bufferLayout buf {-# INLINE_ARRAY bufferLayout #-} instance Eq a => Eq (Array A [a]) where (==) (AArray_List arr1) (AArray_List arr2) = arr1 == arr2 {-# INLINE (==) #-}