module Language.Copilot.Language.Sampling (
extB, extI8, extI16, extI32, extI64,
extW8, extW16, extW32, extW64, extF, extD,
extArrB, extArrI8, extArrI16, extArrI32, extArrI64,
extArrW8, extArrW16, extArrW32, extArrW64, extArrF, extArrD,
) where
import qualified Language.Atom as A
import Data.Int
import Data.Word
import Language.Copilot.Core
class ExtCl a where
extB :: a -> Spec Bool
extI8 :: a -> Spec Int8
extI16 :: a -> Spec Int16
extI32 :: a -> Spec Int32
extI64 :: a -> Spec Int64
extW8 :: a -> Spec Word8
extW16 :: a -> Spec Word16
extW32 :: a -> Spec Word32
extW64 :: a -> Spec Word64
extF :: a -> Spec Float
extD :: a -> Spec Double
extArrB :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Bool
extArrI8 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Int8
extArrI16 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Int16
extArrI32 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Int32
extArrI64 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Int64
extArrW8 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Word8
extArrW16 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Word16
extArrW32 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Word32
extArrW64 :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Word64
extArrF :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Float
extArrD :: (Streamable b, A.IntegralE b) => a -> Spec b -> Spec Double
instance ExtCl String where
extB var = PVar A.Bool (ExtV var)
extI8 var = PVar A.Int8 (ExtV var)
extI16 var = PVar A.Int16 (ExtV var)
extI32 var = PVar A.Int32 (ExtV var)
extI64 var = PVar A.Int64 (ExtV var)
extW8 var = PVar A.Word8 (ExtV var)
extW16 var = PVar A.Word16 (ExtV var)
extW32 var = PVar A.Word32 (ExtV var)
extW64 var = PVar A.Word64 (ExtV var)
extF var = PVar A.Float (ExtV var)
extD var = PVar A.Double (ExtV var)
extArrB = \v idx -> PArr A.Bool (ExtV v, idx)
extArrI8 = \v idx -> PArr A.Int8 (ExtV v, idx)
extArrI16 = \v idx -> PArr A.Int16 (ExtV v, idx)
extArrI32 = \v idx -> PArr A.Int32 (ExtV v, idx)
extArrI64 = \v idx -> PArr A.Int64 (ExtV v, idx)
extArrW8 = \v idx -> PArr A.Word8 (ExtV v, idx)
extArrW16 = \v idx -> PArr A.Word16 (ExtV v, idx)
extArrW32 = \v idx -> PArr A.Word32 (ExtV v, idx)
extArrW64 = \v idx -> PArr A.Word64 (ExtV v, idx)
extArrF = \v idx -> PArr A.Float (ExtV v, idx)
extArrD = \v idx -> PArr A.Double (ExtV v, idx)
instance ExtCl Ext where
extB = PVar A.Bool
extI8 = PVar A.Int8
extI16 = PVar A.Int16
extI32 = PVar A.Int32
extI64 = PVar A.Int64
extW8 = PVar A.Word8
extW16 = PVar A.Word16
extW32 = PVar A.Word32
extW64 = PVar A.Word64
extF = PVar A.Float
extD = PVar A.Double
extArrB = curry (PArr A.Bool)
extArrI8 = curry (PArr A.Int8)
extArrI16 = curry (PArr A.Int16)
extArrI32 = curry (PArr A.Int32)
extArrI64 = curry (PArr A.Int64)
extArrW8 = curry (PArr A.Word8)
extArrW16 = curry (PArr A.Word16)
extArrW32 = curry (PArr A.Word32)
extArrW64 = curry (PArr A.Word64)
extArrF = curry (PArr A.Float)
extArrD = curry (PArr A.Double)