composite-binary (empty) → 0.7.4.0
raw patch · 3 files changed
+54/−0 lines, 3 filesdep +basedep +binarydep +composite-basesetup-changed
Dependencies added: base, binary, composite-base
Files
- Setup.hs +2/−0
- composite-binary.cabal +34/−0
- src/Composite/Record/Binary.hs +18/−0
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ composite-binary.cabal view
@@ -0,0 +1,34 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.33.0.+--+-- see: https://github.com/sol/hpack+--+-- hash: a6ec3b30f6193a5ac05adee9358e841a0f1985c3a23c48d9ceafc78ec0621524++name: composite-binary+version: 0.7.4.0+synopsis: Orphan binary instances.+description: Binary instance for (:->) and Record.+category: Records+homepage: https://github.com/ConferOpenSource/composite#readme+author: Confer Health, Inc+maintainer: oss@vitalbio.com+copyright: 2017 Confer Health, Inc., 2020 Vital Biosciences+license: BSD3+build-type: Simple++library+ exposed-modules:+ Composite.Record.Binary+ other-modules:+ Paths_composite_binary+ hs-source-dirs:+ src+ default-extensions: DataKinds FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase MultiParamTypeClasses MultiWayIf OverloadedStrings PatternSynonyms PolyKinds QuasiQuotes RankNTypes ScopedTypeVariables StandaloneDeriving StrictData TemplateHaskell TupleSections TypeFamilies TypeOperators ViewPatterns+ ghc-options: -Wall -O2+ build-depends:+ base >=4.7 && <5+ , binary >=0.8 && <0.9+ , composite-base >=0.7 && <0.8+ default-language: Haskell2010
+ src/Composite/Record/Binary.hs view
@@ -0,0 +1,18 @@+{-# 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