packages feed

futhask-base-0.1.0.0: src/Futhask/Array/Unit.hs

{-# LANGUAGE TypeFamilyDependencies, FlexibleContexts, GADTs, FlexibleInstances #-}
{-|
Unit Array
-}
module Futhask.Array.Unit where
import Futhask.Array.Element
import Futhask.Array.Boxed

data UnitArray = UnitArray Int
data MUnitArray = MUnitArray Int

instance Element () where
    type Array () = UnitArray
    type MArray () = MUnitArray
    size (UnitArray sz) = sz
    msize (MUnitArray sz) = sz
    unsafeRead _ _ = ()
    unsafePeek _ _ = pure ()
    unsafePoke _ _ _ = pure ()
    unsafeThaw (UnitArray sz) = pure $ MUnitArray sz
    unsafeFreeze (MUnitArray sz) = pure $ UnitArray sz
    unsafeSlice _ _ sz = UnitArray sz
    scratch sz = pure $ MUnitArray sz

instance Element UnitArray where
    type Array UnitArray = BArray UnitArray
    type MArray UnitArray = MBArray UnitArray
    size = sizeB
    msize = msizeB
    unsafeRead = unsafeReadB
    unsafePeek = unsafePeekB
    unsafePoke = unsafePokeB
    unsafeThaw = unsafeThawB
    unsafeFreeze = unsafeFreezeB
    unsafeSlice = unsafeSliceB
    scratch = scratchB