hosc-0.11: Sound/OpenSoundControl/Coding.hs
{-# LANGUAGE FlexibleInstances,TypeSynonymInstances #-}
-- | A type-class to provide coding operations to different data types
-- using the same function names.
module Sound.OpenSoundControl.Coding (Coding(..),Coder) where
import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as B
import qualified Data.ByteString.Lazy.Char8 as C
import Sound.OpenSoundControl.Type (OSC)
import qualified Sound.OpenSoundControl.Coding.Decode.Binary as Binary
import qualified Sound.OpenSoundControl.Coding.Encode.Builder as Builder
-- | Converting from and to binary packet representations.
class Coding a where
-- | Decode an OSC packet.
encodeOSC :: OSC -> a
-- | Encode an OSC packet.
decodeOSC :: a -> OSC
instance Coding S.ByteString where
encodeOSC = Builder.encodeOSC'
decodeOSC = Binary.decodeOSC'
instance Coding B.ByteString where
encodeOSC = Builder.encodeOSC
decodeOSC = Binary.decodeOSC
instance Coding String where
encodeOSC = C.unpack . encodeOSC
decodeOSC = decodeOSC . C.pack
-- | An 'encodeOSC' and 'decodeOSC' pair over 'B.ByteString'.
type Coder = (OSC -> B.ByteString,B.ByteString -> OSC)