packages feed

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
@@ -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