module ID3.Type.Unparse where import ID3.Parser.UnSync (synchronise) import Codec.Binary.UTF8.String (encode, encodeString) import Data.Word (Word8) import Data.Accessor class Parsed a where unparse :: a -> [Word8] instance Parsed Integer where unparse i = synchronise i data Str = Str String deriving Eq instance Parsed Str where unparse (Str s) = encode s data Inf = Inf [(String, String)] deriving Eq instance Show Inf where show (Inf xs) = concatMap (encodeString . snd) xs instance Parsed Inf where unparse _ = undefined -- unparse (Inf xs) = 0x03 : (concat $ intersperse [0x00] $ map (\(_,s) -> unparse $ Str s) xs) ----------------------------- class HasSize a where size :: Accessor a Integer updateSize :: a -> a updateSize x = size ^= (x^.size) $ x