{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MonoLocalBinds #-}
module Numeric.Scalar
( Scalar, unScalar, scalar, fromScalar
, Scf, Scd, Sci, Scw
) where
import GHC.Base (unsafeCoerce#)
import Numeric.DataFrame.Family (DataFrame)
import Numeric.DataFrame.SubSpace (SubSpace (ewgen))
import Numeric.Dim (Nat)
type Scalar t = DataFrame t ('[] :: [Nat])
type Scf = Scalar Float
type Scd = Scalar Double
type Sci = Scalar Int
type Scw = Scalar Word
unScalar :: Scalar t -> t
unScalar = unsafeCoerce#
{-# INLINE unScalar #-}
scalar :: t -> Scalar t
scalar = unsafeCoerce#
{-# INLINE scalar #-}
fromScalar :: SubSpace t '[] ds ds
=> Scalar t -> DataFrame t ds
fromScalar = ewgen
{-# INLINE fromScalar #-}