import "Prelude" import "Serialization" as Serialization rt :: Serialization.IO a => a -> a rt v = Serialization.readByteArray (Serialization.writeByteArray v) data FooBar a = Foo Integer | Bar a deriving instance (Show a) => Show (FooBar a) deriving instance (Serialization.IO a) => Serialization.IO (FooBar a) /* instance IO FooBar where read s = match Serialization.read s :: Integer with 0 -> Foo (Serialization.read s) 1 -> Bar (Serialization.read s) write s (Foo x) = do Serialization.write s (0 :: Integer) ; Serialization.write s x write s (Bar x) = do Serialization.write s (1 :: Integer) ; Serialization.write s x */ main = show (rt (Foo 3 :: FooBar Double)) -- Foo 3