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