Document zonkTyCoVarsAndFV determinism
authorBartosz Nitka <niteria@gmail.com>
Thu, 12 May 2016 13:44:52 +0000 (06:44 -0700)
committerBartosz Nitka <niteria@gmail.com>
Thu, 12 May 2016 13:45:13 +0000 (06:45 -0700)
I've changed it to use nonDetEltsUFM and documented why
it's OK.

Test Plan: it builds

Reviewers: bgamari, austin, simonmar, goldfire, simonpj

Reviewed By: simonpj

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2204

GHC Trac Issues: #4012

compiler/typecheck/TcMType.hs

index 8ad9aba..94c4947 100644 (file)
@@ -108,6 +108,7 @@ import FastString
 import SrcLoc
 import Bag
 import Pair
+import UniqFM
 import qualified GHC.LanguageExtensions as LangExt
 
 import Control.Monad
@@ -1230,7 +1231,11 @@ zonkTyCoVar tv | isTcTyVar tv = zonkTcTyVar tv
    -- painful to make them into TcTyVars there
 
 zonkTyCoVarsAndFV :: TyCoVarSet -> TcM TyCoVarSet
-zonkTyCoVarsAndFV tycovars = tyCoVarsOfTypes <$> mapM zonkTyCoVar (varSetElems tycovars)
+zonkTyCoVarsAndFV tycovars =
+  tyCoVarsOfTypes <$> mapM zonkTyCoVar (nonDetEltsUFM tycovars)
+  -- It's OK to use nonDetEltsUFM here because we immediately forget about
+  -- the ordering by turning it into a nondeterministic set and the order
+  -- of zonking doesn't matter for determinism.
 
 -- Takes a list of TyCoVars, zonks them and returns a
 -- deterministically ordered list of their free variables.