{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UnboxedTuples #-}
module Numeric.DataFrame.Internal.Array.Class
( PrimArray (..)
, ixOff, unsafeFromFlatList
) where
import GHC.Base (ByteArray#, Int#, Int (..))
import Numeric.PrimBytes
class PrimBytes t => PrimArray t a | a -> t where
broadcast :: t -> a
ix# :: Int# -> a -> t
gen# :: Int#
-> (s -> (# s, t #))
-> s -> (# s, a #)
upd# :: Int#
-> Int# -> t -> a -> a
elemOffset :: a -> Int#
elemSize0 :: a -> Int#
fromElems :: Int# -> Int# -> ByteArray# -> a
ixOff :: PrimArray t a => Int -> a -> t
ixOff (I# i) = ix# i
unsafeFromFlatList :: PrimArray t a => Int -> [t] -> a
unsafeFromFlatList (I# n) vs = case gen# n f vs of (# _, r #) -> r
where
f [] = (# [], undefined #)
f (x:xs) = (# xs, x #)