From 348f852be5ec7adfd1d4b858319a73adc7c6fa34 Mon Sep 17 00:00:00 2001 From: Georgy Lukyanov Date: Wed, 3 Apr 2024 14:54:27 +0200 Subject: [PATCH] Build correct non-opaque key-values in `KMap` smart constructor --- library/Booster/Pattern/Base.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/library/Booster/Pattern/Base.hs b/library/Booster/Pattern/Base.hs index f48f93af..287241ce 100644 --- a/library/Booster/Pattern/Base.hs +++ b/library/Booster/Pattern/Base.hs @@ -588,16 +588,19 @@ pattern KMap def keyVals rest <- Term _ (KMapF def keyVals rest) (keyVals', rest') = case rest of Just (KMap def' kvs r) | def' == def -> (kvs, r) r -> ([], r) + newKeyVals = Set.toList $ Set.fromList $ keyVals ++ keyVals' + newRest = rest' in Term argAttributes + { hash = Hashable.hash ( "KMap" :: ByteString , def - , map (\(k, v) -> (hash $ getAttributes k, hash $ getAttributes v)) keyVals - , hash . getAttributes <$> rest + , map (\(k, v) -> (hash $ getAttributes k, hash $ getAttributes v)) newKeyVals + , hash . getAttributes <$> newRest ) } - $ KMapF def (Set.toList $ Set.fromList $ keyVals ++ keyVals') rest' + $ KMapF def newKeyVals newRest pattern KList :: KListDefinition -> [Term] -> Maybe (Term, [Term]) -> Term pattern KList def heads rest <- Term _ (KListF def heads rest)