Guest User

Untitled

a guest
Mar 22nd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.74 KB | None | 0 0
  1. {-# LANGUAGE RankNTypes #-}
  2. {-# LANGUAGE ExistentialQuantification #-}
  3. {-# LANGUAGE FlexibleInstances #-}
  4. {-# LANGUAGE NoImplicitPrelude #-}
  5. {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  6.  
  7. module Serialization where
  8.  
  9. import Protolude
  10. import Data.Binary
  11.  
  12. data SerializationError = BinaryDecodingError Text
  13.  
  14. class Serializable a where
  15. serialize :: a -> LByteString
  16. deserialize :: LByteString -> Either SerializationError a
  17.  
  18.  
  19. newtype BinarySerializable a = MkBinarySerializable a
  20.  
  21. instance Binary a => Serializable (BinarySerializable a) where
  22. serialize (MkBinarySerializable a)= encode a
  23. deserialize = bimap (\(_,_, errString) -> BinaryDecodingError (show errString))
  24. (\(_,_, a) -> MkBinarySerializable a)
  25. . decodeOrFail
Add Comment
Please, Sign In to add comment