From 2cadd28947ff28bf4af36be7c81e46476064b911 Mon Sep 17 00:00:00 2001 From: Travis Staton Date: Thu, 2 Mar 2023 17:05:49 -0500 Subject: [PATCH] document toClasses --- .../src/Unison/PatternMatchCoverage/UFMap.hs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/parser-typechecker/src/Unison/PatternMatchCoverage/UFMap.hs b/parser-typechecker/src/Unison/PatternMatchCoverage/UFMap.hs index 0fdab0e59..f33e1a5bd 100644 --- a/parser-typechecker/src/Unison/PatternMatchCoverage/UFMap.hs +++ b/parser-typechecker/src/Unison/PatternMatchCoverage/UFMap.hs @@ -213,13 +213,22 @@ union k0 k1 mapinit mergeValues = toMaybe do KeyNotFound _k -> Nothing MergeFailed _v0 _v1 -> Nothing -toClasses :: forall k v. (Ord k) => UFMap k v -> [(k, Set k, v)] +-- | Dump the @UFmap@ to a list grouped by equivalence class +toClasses :: + forall k v. + (Ord k) => + UFMap k v -> + -- | [(canonical key, equivalence class, value)] + [(k, Set k, v)] toClasses m0 = let cmFinal :: Map k (k, Set k, v) - (_mfinal, cmFinal) = foldl' phi (m0, Map.empty) keys + (_mfinal, cmFinal) = + -- we fold over the UFMap's keys and build up a Map that + -- groups the keys by equivalence class. + foldl' buildCmFinal (m0, Map.empty) keys keys = case m0 of UFMap m -> Map.keys m - phi (m, cm) k = + buildCmFinal (m, cm) k = let (kcanon, _, v, m') = fromJust (lookupCanon k m) cm' = Map.insertWith