@@ -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)
@@ -75,7 +73,6 @@ import Data.Text.Manipulate
7573import Formatting
7674import Gen.Orphans ()
7775import Gen.Text
78−import Gen.Types.Map
7976import GHC.Generics (Generic)
8077import Language.Haskell.Exts.Build
8178import Language.Haskell.Exts.Syntax (Exp, Name (..))
@@ -167,9 +164,8 @@ instance FromJSON Global where
167164instance ToJSON Global where
168165 toJSON = toJSON . global
169166
170−instance FromJSON v => FromJSON (Map Global v) where
171− parseJSON = fmap (Map.fromList . map (first mkGlobal) . Map.toList)
172− . parseJSON
167+instance FromJSONKey Global
168+instance ToJSONKey Global
173169
174170gid :: Format a (Global -> a)
175171gid = later (Build.fromText . global)
@@ -177,9 +173,8 @@ gid = later (Build.fromText . global)
177173newtype Local = Local { local :: Text }
178174 deriving (Eq, Ord, Show, Generic, Hashable, FromJSON, ToJSON, IsString)
179175
180−instance FromJSON v => FromJSON (Map Local v) where
181− parseJSON = fmap (Map.fromList . map (first Local) . Map.toList)
182− . parseJSON
176+instance FromJSONKey Local
177+instance ToJSONKey Local
183178
184179lid :: Format a (Local -> a)
185180lid = later (Build.fromText . local)