module Sound.ALSA.PCM.Core.Convert where
import qualified Foreign.Marshal.Utils as U
import qualified Foreign.Storable as St
import Foreign.Ptr (Ptr, )
import qualified Prelude as P
import Prelude hiding (id, )
data T h c =
Cons {forall h c. T h c -> h -> c
fromHaskell :: h -> c, forall h c. T h c -> c -> h
toHaskell :: c -> h}
with ::
(St.Storable c) =>
T h c -> h -> (Ptr c -> IO a) -> IO a
with :: forall c h a. Storable c => T h c -> h -> (Ptr c -> IO a) -> IO a
with T h c
conv h
a = c -> (Ptr c -> IO a) -> IO a
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
U.with (T h c -> h -> c
forall h c. T h c -> h -> c
fromHaskell T h c
conv h
a)
peek ::
(St.Storable a) =>
T h a -> Ptr a -> IO h
peek :: forall a h. Storable a => T h a -> Ptr a -> IO h
peek T h a
conv Ptr a
aptr = (a -> h) -> IO a -> IO h
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (T h a -> a -> h
forall h c. T h c -> c -> h
toHaskell T h a
conv) (IO a -> IO h) -> IO a -> IO h
forall a b. (a -> b) -> a -> b
$ Ptr a -> IO a
forall a. Storable a => Ptr a -> IO a
St.peek Ptr a
aptr
id :: T a a
id :: forall a. T a a
id = (a -> a) -> (a -> a) -> T a a
forall h c. (h -> c) -> (c -> h) -> T h c
Cons a -> a
forall a. a -> a
P.id a -> a
forall a. a -> a
P.id
int :: (Integral a, Integral b) => T a b
int :: forall a b. (Integral a, Integral b) => T a b
int = (a -> b) -> (b -> a) -> T a b
forall h c. (h -> c) -> (c -> h) -> T h c
Cons a -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral b -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral