From acc63bff2b0a8cd7a212cd177f393bf2d4f74a40 Mon Sep 17 00:00:00 2001 From: Mitchell Rosen Date: Thu, 1 Aug 2024 16:23:31 -0400 Subject: [PATCH] generalize findConflictedAlias a bit --- unison-merge/package.yaml | 1 + .../src/Unison/Merge/FindConflictedAlias.hs | 18 +++++++++++------- unison-merge/unison-merge.cabal | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/unison-merge/package.yaml b/unison-merge/package.yaml index c31adfcd5b..5a81188e65 100644 --- a/unison-merge/package.yaml +++ b/unison-merge/package.yaml @@ -79,6 +79,7 @@ default-extensions: - OverloadedRecordDot - OverloadedStrings - PatternSynonyms + - QuantifiedConstraints - RankNTypes - ScopedTypeVariables - TupleSections diff --git a/unison-merge/src/Unison/Merge/FindConflictedAlias.hs b/unison-merge/src/Unison/Merge/FindConflictedAlias.hs index 4b343b59da..bf7222d4dd 100644 --- a/unison-merge/src/Unison/Merge/FindConflictedAlias.hs +++ b/unison-merge/src/Unison/Merge/FindConflictedAlias.hs @@ -6,7 +6,6 @@ where import Data.Map.Strict qualified as Map import Data.Set qualified as Set import Unison.Merge.DiffOp (DiffOp (..)) -import Unison.Merge.Synhashed (Synhashed) import Unison.Merge.Updated qualified import Unison.Prelude import Unison.Util.BiMultimap (BiMultimap) @@ -30,19 +29,24 @@ import Unison.Util.Defns (Defns (..), DefnsF3) -- -- then (foo, bar) is a conflicted alias. findConflictedAlias :: - forall name term typ. - (Ord name, Ord term, Ord typ) => + forall name synhashed term typ. + (Ord name, forall ref. Eq (synhashed ref), Ord term, Ord typ) => Defns (BiMultimap term name) (BiMultimap typ name) -> - DefnsF3 (Map name) DiffOp Synhashed term typ -> + DefnsF3 (Map name) DiffOp synhashed term typ -> Maybe (Defn (name, name) (name, name)) findConflictedAlias defns diff = asum [TermDefn <$> go defns.terms diff.terms, TypeDefn <$> go defns.types diff.types] where - go :: forall ref. (Ord ref) => BiMultimap ref name -> Map name (DiffOp (Synhashed ref)) -> Maybe (name, name) + go :: + forall ref. + (Eq (synhashed ref), Ord ref) => + BiMultimap ref name -> + Map name (DiffOp (synhashed ref)) -> + Maybe (name, name) go namespace diff = asum (map f (Map.toList diff)) where - f :: (name, DiffOp (Synhashed ref)) -> Maybe (name, name) + f :: (name, DiffOp (synhashed ref)) -> Maybe (name, name) f (name, op) = case op of DiffOp'Add _ -> Nothing @@ -54,7 +58,7 @@ findConflictedAlias defns diff = & map (g hashed1.new) & asum where - g :: Synhashed ref -> name -> Maybe (name, name) + g :: synhashed ref -> name -> Maybe (name, name) g hashed1 alias = case Map.lookup alias diff of Just (DiffOp'Update hashed2) | hashed1 == hashed2.new -> Nothing diff --git a/unison-merge/unison-merge.cabal b/unison-merge/unison-merge.cabal index aa3fc272d1..69654bb3a5 100644 --- a/unison-merge/unison-merge.cabal +++ b/unison-merge/unison-merge.cabal @@ -69,6 +69,7 @@ library OverloadedRecordDot OverloadedStrings PatternSynonyms + QuantifiedConstraints RankNTypes ScopedTypeVariables TupleSections