Object serialization: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 985: | Line 985: | ||
yellow lab, not trained |
yellow lab, not trained |
||
trained collie, but doesn't catch frisbee</pre> |
trained collie, but doesn't catch frisbee</pre> |
||
=={{header|Haskell}}== |
|||
Example uses [https://hackage.haskell.org/package/binary <tt>binary</tt>] package. Since Haskell doesn't directly support OO-style inheritance, we use a sum type instead: |
|||
<lang haskell> |
|||
{-# LANGUAGE DeriveGeneric #-} |
|||
module Main (main) where |
|||
import qualified Data.ByteString.Lazy as ByteString (readFile, writeFile) |
|||
import Data.Binary (Binary) |
|||
import qualified Data.Binary as Binary (decode, encode) |
|||
import GHC.Generics (Generic) |
|||
data Employee = |
|||
Manager String String |
|||
| IndividualContributor String String |
|||
deriving (Generic, Show) |
|||
instance Binary Employee |
|||
main :: IO () |
|||
main = do |
|||
ByteString.writeFile "objects.dat" $ Binary.encode |
|||
[ IndividualContributor "John Doe" "Sales" |
|||
, Manager "Jane Doe" "Engineering" |
|||
] |
|||
bytes <- ByteString.readFile "objects.dat" |
|||
let employees = Binary.decode bytes |
|||
print (employees :: [Employee]) |
|||
</lang> |
|||
=={{header|Groovy}}== |
=={{header|Groovy}}== |