module Sound.OpenSoundControl.Coerce where
import Sound.OpenSoundControl.OSC
coerce :: (Datum -> Datum) -> OSC -> OSC
coerce f (Message s xs) = Message s (map f xs)
coerce f (Bundle t xs) = Bundle t (map (coerce f) xs)
f_to_d :: Datum -> Datum
f_to_d (Float n) = Double n
f_to_d x = x
if_to_d :: Datum -> Datum
if_to_d (Int n) = Double (fromIntegral n)
if_to_d (Float n) = Double n
if_to_d x = x
fd_to_i :: Datum -> Datum
fd_to_i (Float n) = Int (round n)
fd_to_i (Double n) = Int (round n)
fd_to_i x = x
normalize :: OSC -> OSC
normalize = coerce f_to_d