module Sound.Frame where

import Data.Word (Word8, Word16, Word32, )
import Data.Int (Int8, Int16, Int32, )
import Foreign.Storable (sizeOf, )


class C y where
   {- | The argument is not touched and can be undefined -}
   numberOfChannels :: y -> Int
   {- |
   Size of elements.
   In a nested record type, like @Stereo (Stereo a)@,
   it is the size of the atomic element, in our example @a@.
   -}
   sizeOfElement :: y -> Int

instance C Word8 where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf

instance C Int8 where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf

instance C Word16 where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf

instance C Int16 where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf

instance C Word32 where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf

instance C Int32 where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf

instance C Float where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf

instance C Double where
   numberOfChannels _ = 1
   sizeOfElement = sizeOf


withSignal :: (y -> a) -> (sig y -> a)
withSignal f _ = f undefined