aeson-schema-0.4.1.2: src/Data/Aeson/TH/Lift.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Aeson.TH.Lift () where
import qualified Data.HashMap.Lazy as HM
import qualified Data.Scientific as S
import Data.Text (Text, pack, unpack)
import qualified Data.Vector as V
import Language.Haskell.TH.Syntax (Lift (..))
instance Lift Text where
lift txt = [| pack $(lift (unpack txt)) |]
#if ! MIN_VERSION_template_haskell(2,10,0)
instance Lift Double where
lift d = [| fromRational $(litE . rationalL . toRational $ d) :: Double |]
#endif
instance (Lift k, Lift v) => Lift (HM.HashMap k v) where
lift hm = [| HM.fromList $(lift (HM.toList hm)) |]
instance (Lift a) => Lift (V.Vector a) where
lift vec = [| V.fromList $(lift (V.toList vec)) |]
instance Lift S.Scientific where
lift s =
let c = S.coefficient s
e = S.base10Exponent s
in [| S.scientific c e |]