@@ -58,12 +58,10 @@ import Control.Applicative
5858import Control.Monad
5959import Data.Aeson hiding (Bool, String)
6060import qualified Data.Attoparsec.Text as A
61−import Data.Bifunctor (first)
6261import qualified Data.CaseInsensitive as CI
6362import Data.Foldable (foldl')
6463import Data.Function (on)
6564import Data.Hashable
66−import qualified Data.HashMap.Strict as Map
6765import Data.List (intersperse)
6866import Data.List (elemIndex, nub, sortOn)
6967import Data.Semigroup hiding (Sum)
@@ -73,9 +71,7 @@ import qualified Data.Text as Text
7371import qualified Data.Text.Lazy.Builder as Build
7472import Data.Text.Manipulate
7573import Formatting
76−import Gen.Orphans ()
7774import Gen.Text
78−import Gen.Types.Map
7975import GHC.Generics (Generic)
8076import Language.Haskell.Exts.Build
8177import Language.Haskell.Exts.Syntax (Exp, Name (..))
@@ -164,22 +160,28 @@ instance IsString Global where
164160instance FromJSON Global where
165161 parseJSON = withText "global" (pure . mkGlobal)
166162
163+instance FromJSONKey Global where
164+ fromJSONKey = FromJSONKeyText mkGlobal
165+
167166instance ToJSON Global where
168167 toJSON = toJSON . global
169168
170−instance FromJSON v => FromJSON (Map Global v) where
171− parseJSON = fmap (Map.fromList . map (first mkGlobal) . Map.toList)
172− . parseJSON
173−
174169gid :: Format a (Global -> a)
175170gid = later (Build.fromText . global)
176171
177172newtype Local = Local { local :: Text }
178− deriving (Eq, Ord, Show, Generic, Hashable, FromJSON, ToJSON, IsString)
179−
180−instance FromJSON v => FromJSON (Map Local v) where
181− parseJSON = fmap (Map.fromList . map (first Local) . Map.toList)
182− . parseJSON
173+ deriving
174+ ( Eq
175+ , Ord
176+ , Show
177+ , Generic
178+ , Hashable
179+ , FromJSON
180+ , ToJSON
181+ , FromJSONKey
182+ , ToJSONKey
183+ , IsString
184+ )
183185
184186lid :: Format a (Local -> a)
185187lid = later (Build.fromText . local)