module Sound.MED.Raw.SynthWF where

import Sound.MED.Basic.Amiga
import Sound.MED.Basic.Utility

data SynthWF = SynthWF
  { SynthWF -> UWORD
len2   :: UWORD
  , SynthWF -> [BYTE]
wfdata :: [ BYTE ]
  }
  deriving (Int -> SynthWF -> ShowS
[SynthWF] -> ShowS
SynthWF -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SynthWF] -> ShowS
$cshowList :: [SynthWF] -> ShowS
show :: SynthWF -> String
$cshow :: SynthWF -> String
showsPrec :: Int -> SynthWF -> ShowS
$cshowsPrec :: Int -> SynthWF -> ShowS
Show)

{-# SPECIALISE peek :: PTR -> StorableReader SynthWF #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader SynthWF #-}
peek :: (Reader m) => PTR -> m SynthWF
peek :: forall (m :: * -> *). Reader m => PTR -> m SynthWF
peek PTR
p = do
  UWORD
len2'   <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pforall a. Num a => a -> a -> a
+PTR
0)
  [BYTE]
wfdata' <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => Peek m BYTE
peekBYTE forall a b. (a -> b) -> a -> b
$ forall i. Integral i => PTR -> PTR -> i -> [PTR]
pointerRangeGen (PTR
pforall a. Num a => a -> a -> a
+PTR
2) PTR
1 (UWORD
len2'forall a. Num a => a -> a -> a
*UWORD
2)
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ UWORD -> [BYTE] -> SynthWF
SynthWF
    UWORD
len2' [BYTE]
wfdata'