composite-binary-0.7.4.0: src/Composite/Record/Binary.hs
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Composite.Record.Binary where
import Composite.Record((:->), Record, Rec((:&)), val, getVal)
import Control.Applicative(liftA2)
import Data.Binary(Binary(put, get))
import Data.Functor.Identity(runIdentity)
instance Binary a => Binary (s :-> a) where
put = put . getVal
get = fmap (runIdentity . val) get
instance Binary (Record '[])
instance (Binary x, Binary (Record xs)) => Binary (Record (x : xs)) where
put (x :& xs) = put x >> put xs
get = liftA2 (:&) get get