packages feed

chez-grater-0.0.1: src/Chez/Grater/Internal/CI/Orphans.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}
module Chez.Grater.Internal.CI.Orphans where

import Chez.Grater.Internal.Prelude

import Data.Aeson
  ( FromJSON, FromJSONKey, ToJSON, ToJSONKey, fromJSONKey, fromJSONKeyList, parseJSON, toJSON
  , toJSONKey, toJSONKeyList
  )
import Data.Functor.Contravariant (contramap)
import qualified Data.CaseInsensitive as CI

instance (CI.FoldCase a, FromJSON a) => FromJSON (CI a) where
  parseJSON = fmap CI.mk . parseJSON

instance (CI.FoldCase a, FromJSONKey a) => FromJSONKey (CI a) where
  fromJSONKey = CI.mk <$> fromJSONKey
  fromJSONKeyList = fmap CI.mk <$> fromJSONKeyList

instance (ToJSON a) => ToJSON (CI a) where
  toJSON = toJSON . CI.original

instance (ToJSONKey a) => ToJSONKey (CI a) where
  toJSONKey = contramap CI.original toJSONKey
  toJSONKeyList = contramap (fmap CI.original) toJSONKeyList