module Data.Repa.Array.Material.Auto.InstMaybe
( 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 (Maybe a) where
data Array A (Maybe a)
= AArray_Maybe !(Array B (Maybe a))
layout (AArray_Maybe arr)
= Auto (A.length arr)
index (AArray_Maybe arr) ix
= A.index arr ix
deriving instance Show a => Show (Array A (Maybe a))
instance Bulk A a => Windowable A (Maybe a) where
window st len (AArray_Maybe arr)
= AArray_Maybe (window st len arr)
instance Target A (Maybe a) where
data Buffer A (Maybe a)
= ABuffer_Maybe !(Buffer B (Maybe a))
unsafeNewBuffer (Auto len)
= liftM ABuffer_Maybe $ unsafeNewBuffer (Boxed len)
unsafeReadBuffer (ABuffer_Maybe arr) ix
= unsafeReadBuffer arr ix
unsafeWriteBuffer (ABuffer_Maybe arr) ix !mx
= unsafeWriteBuffer arr ix mx
unsafeGrowBuffer (ABuffer_Maybe arr) bump
= liftM ABuffer_Maybe $ unsafeGrowBuffer arr bump
unsafeFreezeBuffer (ABuffer_Maybe arr)
= liftM AArray_Maybe $ unsafeFreezeBuffer arr
unsafeThawBuffer (AArray_Maybe arr)
= liftM ABuffer_Maybe $ unsafeThawBuffer arr
unsafeSliceBuffer st len (ABuffer_Maybe buf)
= liftM ABuffer_Maybe $ unsafeSliceBuffer st len buf
touchBuffer (ABuffer_Maybe buf)
= touchBuffer buf
bufferLayout (ABuffer_Maybe buf)
= Auto $ A.extent $ bufferLayout buf
instance Eq a
=> Eq (Array A (Maybe a)) where
(==) (AArray_Maybe arr1) (AArray_Maybe arr2) = arr1 == arr2