diff --git a/src/Nix/Expr/Types.hs b/src/Nix/Expr/Types.hs index c188c10cd..2eb1b6a6d 100644 --- a/src/Nix/Expr/Types.hs +++ b/src/Nix/Expr/Types.hs @@ -32,6 +32,7 @@ import Data.Data import Data.Fix import Data.Functor.Classes import Data.Hashable.Lifted +import qualified Data.HashMap.Lazy as MapL import qualified Data.List.NonEmpty as NE import qualified Text.Show import Data.Traversable @@ -615,7 +616,19 @@ hashAt #else hashAt :: VarName -> Lens' (AttrSet v) (Maybe v) #endif -hashAt = flip alterF +hashAt = alterF + where + alterF + :: (Functor f) + => Text + -> (Maybe v -> f (Maybe v)) + -> AttrSet v + -> f (AttrSet v) + alterF k f m = + maybe + (MapL.delete k m) + (\ v -> MapL.insert k v m) + <$> f (MapL.lookup k m) -- | Get the name out of the parameter (there might be none). paramName :: Params r -> Maybe VarName diff --git a/src/Nix/Utils.hs b/src/Nix/Utils.hs index 4c955455b..ccb62e7fa 100644 --- a/src/Nix/Utils.hs +++ b/src/Nix/Utils.hs @@ -172,19 +172,6 @@ uriAwareSplit txt = (e1 <> "://" <> suffix, PathEntryURI) : path | otherwise -> (e1, PathEntryPath) : uriAwareSplit (Text.drop 1 e2) -alterF - :: (Eq k, Hashable k, Functor f) - => (Maybe v -> f (Maybe v)) - -> k - -> HashMap k v - -> f (HashMap k v) -alterF f k m = - maybe - (M.delete k m) - (\ v -> M.insert k v m) - <$> f (M.lookup k m) - - -- | Analog for @bool@ or @maybe@, for list-like cons structures. list :: Foldable t