module Sound.PortAudio.Helpers where
import Control.Monad
import Control.Monad.Fix
enumToC :: (Enum a, Enum b) => a -> b
enumToC = toEnum . fromEnum
chunk :: Int -> [a] -> [[a]]
chunk n list = case list of
[] -> []
(y:ys) -> ch' ys (n 1) (y:)
where ch' [] _ k = k [] : []
ch' (y:ys) 0 k = k [] : ch' ys (n 1) (y:)
ch' (y:ys) c k = ch' ys (c 1) (k . (y:))
replicateWhileM :: (Monad m) => m Bool -> m a -> m [a]
replicateWhileM mcond action = let f again = do c <- mcond
if c then liftM2 (:) action again
else return []
in fix f