{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE UnboxedTuples #-}
module Numeric.DataFrame.Internal.Array.Family.ScalarBase (ScalarBase (..)) where
import GHC.Base
import Numeric.DataFrame.Internal.Array.Class
import Numeric.DataFrame.Internal.Array.PrimOps
import Numeric.PrimBytes
newtype ScalarBase t = ScalarBase { _unScalarBase :: t }
deriving ( Enum, Eq, Integral
, Num, Fractional, Floating, Ord, Read, Real, RealFrac, RealFloat
, PrimBytes)
instance Show t => Show (ScalarBase t) where
show (ScalarBase t) = "{ " ++ show t ++ " }"
deriving instance {-# OVERLAPPABLE #-} Bounded t => Bounded (ScalarBase t)
instance {-# OVERLAPPING #-} Bounded (ScalarBase Double) where
maxBound = ScalarBase inftyD
minBound = ScalarBase $ negate inftyD
instance {-# OVERLAPPING #-} Bounded (ScalarBase Float) where
maxBound = ScalarBase inftyF
minBound = ScalarBase $ negate inftyF
instance PrimBytes t => PrimArray t (ScalarBase t) where
broadcast = unsafeCoerce#
{-# INLINE broadcast #-}
ix# _ = unsafeCoerce#
{-# INLINE ix# #-}
gen# _ = unsafeCoerce#
{-# INLINE gen# #-}
upd# _ 0# = const . ScalarBase
upd# _ _ = const id
{-# INLINE upd# #-}
elemOffset _ = 0#
{-# INLINE elemOffset #-}
elemSize0 _ = 1#
{-# INLINE elemSize0 #-}
fromElems off _ ba = indexArray ba off
{-# INLINE fromElems #-}
_suppressHlintUnboxedTuplesWarning :: () -> (# (), () #)
_suppressHlintUnboxedTuplesWarning = undefined