dependent-sum-aeson-orphans 0.1.0.0 → 0.2.0.0
raw patch · 3 files changed
+17/−21 lines, 3 filesdep ~aesondep ~base
Dependency ranges changed: aeson, base
Files
- ChangeLog.md +0/−5
- dependent-sum-aeson-orphans.cabal +3/−4
- src/Data/Dependent/Sum/Orphans.hs +14/−12
− ChangeLog.md
@@ -1,5 +0,0 @@-# Revision history for dependent-sum-aeson-orphans--## 0.1.0.0 -- YYYY-mm-dd--* First version. Released on an unsuspecting world.
dependent-sum-aeson-orphans.cabal view
@@ -1,19 +1,18 @@ name: dependent-sum-aeson-orphans-version: 0.1.0.0+version: 0.2.0.0 license: BSD3 license-file: LICENSE author: Obsidian Systems maintainer: maintainer@obsidian.systems copyright: 2018 Obsidian Systems LLC build-type: Simple-extra-source-files: ChangeLog.md cabal-version: >=1.10 description: JSON instances for DSum and DMap library exposed-modules: Data.Dependent.Sum.Orphans- build-depends: base >=4.9 && <4.11- , aeson >= 1.2 && < 1.3+ build-depends: base >=4.9 && <4.12+ , aeson >= 1.2 && <1.5 , dependent-map , dependent-sum , constraints
src/Data/Dependent/Sum/Orphans.hs view
@@ -1,6 +1,10 @@ {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE TypeApplications #-}+ module Data.Dependent.Sum.Orphans where import Data.Aeson@@ -13,21 +17,19 @@ import Data.Some (Some) import qualified Data.Some as Some -instance (ForallF ToJSON f, Has ToJSON f, ToJSON1 g) => ToJSON (DSum f g) where- toJSON ((f :: f a) :=> (x :: g a))- | Dict :: Dict (ToJSON a) <- argDict f- = toJSON (toJSON f \\ (instF :: ForallF ToJSON f :- ToJSON (f a)), toJSON1 x)+instance (ForallF ToJSON f, Has' ToJSON f g) => ToJSON (DSum f g) where+ toJSON ((f :: f a) :=> (g :: g a))+ = whichever @ToJSON @f @a (has' @ToJSON @g f (toJSON (f, g))) -instance (ForallF ToJSON f, Has ToJSON f, ToJSON1 g) => ToJSON (DMap f g) where+instance (ForallF ToJSON f, Has' ToJSON f g) => ToJSON (DMap f g) where toJSON = toJSON . DMap.toList -instance (FromJSON (Some f), GCompare f, Has FromJSON f, FromJSON1 g) => FromJSON (DSum f g) where+instance (FromJSON (Some f), Has' FromJSON f g) => FromJSON (DSum f g) where parseJSON x = do- (tag, val) <- parseJSON x- Some.This (parsedTag :: f a) <- parseJSON tag- val' <- case argDict parsedTag of- (Dict :: Dict (FromJSON a)) -> parseJSON1 val- return $ parsedTag :=> val'+ (jf, jg) <- parseJSON x+ Some.This (f :: f a) <- parseJSON jf+ g <- has' @FromJSON @g f (parseJSON jg)+ return $ f :=> g -instance (FromJSON (Some f), GCompare f, Has FromJSON f, FromJSON1 g) => FromJSON (DMap f g) where+instance (FromJSON (Some f), GCompare f, Has' FromJSON f g) => FromJSON (DMap f g) where parseJSON = fmap DMap.fromList . parseJSON