{-# LANGUAGE CPP #-} ----------------------------------------------------------------------------- -- | -- Copyright : (C) 2013-2015 Edward Kmett and Anthony Cowley -- License : BSD-style (see the file LICENSE) -- -- Maintainer : Edward Kmett <ekmett@gmail.com> -- Stability : experimental -- Portability : non-portable -- -- Serialization of statically-sized types with the "Data.Binary" -- library. ------------------------------------------------------------------------------ module Linear.Binary ( putLinear , getLinear ) where #if __GLASGOW_HASKELL__ < 710 import Control.Applicative #endif import Data.Binary #if __GLASGOW_HASKELL__ < 710 import Data.Foldable (Foldable, traverse_) import Data.Traversable (Traversable, sequenceA) #else import Data.Foldable (traverse_) #endif -- | Serialize a linear type. putLinear :: (Binary a, Foldable t) => t a -> Put putLinear = traverse_ put -- | Deserialize a linear type. getLinear :: (Binary a, Applicative t, Traversable t) => Get (t a) getLinear = sequenceA $ pure get