module Rate where import qualified Sound.SoxLib as SoxLib class C rate where unpack :: rate -> SoxLib.Rate newtype Sample = Sample SoxLib.Rate deriving (Eq) instance C Sample where unpack (Sample rate) = rate newtype Feature = Feature SoxLib.Rate deriving (Eq) instance C Feature where unpack (Feature rate) = rate newtype Measure = Measure SoxLib.Rate deriving (Eq) instance C Measure where unpack (Measure rate) = rate ratio :: (C rate0, C rate1) => rate0 -> rate1 -> SoxLib.Rate ratio r0 r1 = unpack r0 / unpack r1 featureFromSample :: Sample -> Feature featureFromSample (Sample rate) = Feature rate