@@ -58,12 +58,10 @@ import Control.Applicative
58import Control.Monad
58import Control.Monad
59import Data.Aeson hiding (Bool, String)
59import Data.Aeson hiding (Bool, String)
60import qualified Data.Attoparsec.Text as A
60import qualified Data.Attoparsec.Text as A
61−import Data.Bifunctor (first)
62import qualified Data.CaseInsensitive as CI
61import qualified Data.CaseInsensitive as CI
63import Data.Foldable (foldl')
62import Data.Foldable (foldl')
64import Data.Function (on)
63import Data.Function (on)
65import Data.Hashable
64import Data.Hashable
66−import qualified Data.HashMap.Strict as Map
67import Data.List (intersperse)
65import Data.List (intersperse)
68import Data.List (elemIndex, nub, sortOn)
66import Data.List (elemIndex, nub, sortOn)
69import Data.Semigroup hiding (Sum)
67import Data.Semigroup hiding (Sum)
@@ -73,9 +71,7 @@ import qualified Data.Text as Text
73import qualified Data.Text.Lazy.Builder as Build
71import qualified Data.Text.Lazy.Builder as Build
74import Data.Text.Manipulate
72import Data.Text.Manipulate
75import Formatting
73import Formatting
77import Gen.Text
74import Gen.Text
79import GHC.Generics (Generic)
75import GHC.Generics (Generic)
80import Language.Haskell.Exts.Build
76import Language.Haskell.Exts.Build
81import Language.Haskell.Exts.Syntax (Exp, Name (..))
77import Language.Haskell.Exts.Syntax (Exp, Name (..))
@@ -164,22 +160,28 @@ instance IsString Global where
164instance FromJSON Global where
160instance FromJSON Global where
165 parseJSON = withText "global" (pure . mkGlobal)
161 parseJSON = withText "global" (pure . mkGlobal)
163+instance FromJSONKey Global where
164+ fromJSONKey = FromJSONKeyText mkGlobal
167instance ToJSON Global where
166instance ToJSON Global where
168 toJSON = toJSON . global
167 toJSON = toJSON . global
170−instance FromJSON v => FromJSON (Map Global v) where
171− parseJSON = fmap (Map.fromList . map (first mkGlobal) . Map.toList)
174gid :: Format a (Global -> a)
169gid :: Format a (Global -> a)
175gid = later (Build.fromText . global)
170gid = later (Build.fromText . global)
177newtype Local = Local { local :: Text }
172newtype Local = Local { local :: Text }
178− deriving (Eq, Ord, Show, Generic, Hashable, FromJSON, ToJSON, IsString)
173+ deriving
180−instance FromJSON v => FromJSON (Map Local v) where
175+ , Ord
181− parseJSON = fmap (Map.fromList . map (first Local) . Map.toList)
176+ , Show
182− . parseJSON
177+ , Generic
184lid :: Format a (Local -> a)
186lid :: Format a (Local -> a)
185lid = later (Build.fromText . local)
187lid = later (Build.fromText . local)