diff --git a/src/Utils.hs b/src/Utils.hs index 2019700fd..05366b456 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -2,6 +2,9 @@ -- -- SPDX-License-Identifier: AGPL-3.0-or-later +-- unused imports because of commented out FromJSON and ToJSON instances +{-# OPTIONS_GHC -Wwarn=unused-imports #-} + module Utils ( module Utils , module Data.Containers.ListUtils @@ -157,6 +160,8 @@ import qualified Data.UUID as UUID import Data.Containers.ListUtils +import qualified Data.Aeson.KeyMap as KeyMap + {-# ANN module ("HLint: ignore Use asum" :: String) #-} @@ -1665,7 +1670,7 @@ kmaclazy :: forall a string key ba chunk. -> KMAC a kmaclazy str k = KMAC.finalize . KMAC.updates (KMAC.initialize @a str k) . toChunks -emptyHash :: forall a. HashAlgorithm a => Q (TExp (Digest a)) +emptyHash :: forall a. HashAlgorithm a => Code Q (Digest a) -- ^ Hash of `mempty` -- -- Computationally preferrable to computing the hash at runtime @@ -1864,10 +1869,12 @@ instance (Hashable k, Semigroup v) => Semigroup (MergeHashMap k v) where (MergeHashMap a) <> (MergeHashMap b) = MergeHashMap $ HashMap.unionWith (<>) a b instance (Hashable k, Semigroup v) => Monoid (MergeHashMap k v) where mempty = MergeHashMap HashMap.empty +{- instance (Hashable k, FromJSON v, FromJSONKey k, Semigroup v) => FromJSON (MergeHashMap k v) where parseJSON = case Aeson.fromJSONKey of Aeson.FromJSONKeyCoerce -> Aeson.withObject "HashMap ~Text" $ - coerce @(Aeson.Parser (HashMap k v)) @(Aeson.Parser (MergeHashMap k v)) . fmap HashMap.fromList . traverse (\(k, v) -> (coerce @Text @k k, ) <$> parseJSON v Aeson. Aeson.Key k) . HashMap.toList + --coerce @(Aeson.Parser (HashMap k v)) @(Aeson.Parser (MergeHashMap k v)) . fmap HashMap.fromList . traverse (\(kk, v) -> let k = fromText kk in (coerce @Text @k k, ) <$> parseJSON v Aeson. Aeson.Key kk) . KeyMap.toList + coerce @(Aeson.Parser (HashMap k v)) @(Aeson.Parser (MergeHashMap k v)) . fmap HashMap.fromList . traverse (\(k, v) -> (coerce @Text @k k, ) <$> parseJSON v Aeson. Aeson.Key k) . HashMap.toList Aeson.FromJSONKeyText f -> Aeson.withObject "HashMap" $ fmap MergeHashMap . HashMap.foldrWithKey (\k v m -> HashMap.insertWith (<>) (f k) <$> parseJSON v Aeson. Aeson.Key k <*> m) (pure mempty) Aeson.FromJSONKeyTextParser f -> Aeson.withObject "HashMap" $ @@ -1888,7 +1895,7 @@ instance (Hashable k, FromJSON v, FromJSONKey k, Semigroup v) => FromJSON (Merge parseJSONElemAtIndex :: (Value -> Aeson.Parser a) -> Int -> Vector Value -> Aeson.Parser a parseJSONElemAtIndex p idx ary = p (V.unsafeIndex ary idx) Aeson. Aeson.Index idx - +-} newtype MergeMap k v = MergeMap { unMergeMap :: Map k v } deriving (Show, Generic, Data) @@ -1918,7 +1925,7 @@ instance (Ord k, Semigroup v) => Semigroup (MergeMap k v) where (MergeMap a) <> (MergeMap b) = MergeMap $ Map.unionWith (<>) a b instance (Ord k, Semigroup v) => Monoid (MergeMap k v) where mempty = MergeMap Map.empty -instance (Ord k, FromJSON v, FromJSONKey k, Semigroup v) => FromJSON (MergeMap k v) where +{-instance (Ord k, FromJSON v, FromJSONKey k, Semigroup v) => FromJSON (MergeMap k v) where parseJSON = case Aeson.fromJSONKey of Aeson.FromJSONKeyCoerce -> Aeson.withObject "Map ~Text" $ coerce @(Aeson.Parser (Map k v)) @(Aeson.Parser (MergeMap k v)) . fmap Map.fromList . traverse (\(k, v) -> (coerce @Text @k k, ) <$> parseJSON v Aeson. Aeson.Key k) . HashMap.toList @@ -1942,7 +1949,8 @@ instance (Ord k, FromJSON v, FromJSONKey k, Semigroup v) => FromJSON (MergeMap k parseJSONElemAtIndex :: (Value -> Aeson.Parser a) -> Int -> Vector Value -> Aeson.Parser a parseJSONElemAtIndex p idx ary = p (V.unsafeIndex ary idx) Aeson. Aeson.Index idx - +-} + -------------- -- FilePath -- --------------