summaryrefslogtreecommitdiff
path: root/compiler/utils/UniqDFM.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/utils/UniqDFM.hs')
-rw-r--r--compiler/utils/UniqDFM.hs11
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/utils/UniqDFM.hs b/compiler/utils/UniqDFM.hs
index 60449bcc65..1b104a66cd 100644
--- a/compiler/utils/UniqDFM.hs
+++ b/compiler/utils/UniqDFM.hs
@@ -17,6 +17,7 @@ is not deterministic.
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE TupleSections #-}
{-# OPTIONS_GHC -Wall #-}
module UniqDFM (
@@ -138,6 +139,16 @@ data UniqDFM ele =
-- time. See Note [Overflow on plusUDFM]
deriving (Data, Functor)
+-- | Deterministic, in O(n log n).
+instance Foldable UniqDFM where
+ foldr = foldUDFM
+
+-- | Deterministic, in O(n log n).
+instance Traversable UniqDFM where
+ traverse f = fmap listToUDFM_Directly
+ . traverse (\(u,a) -> (u,) <$> f a)
+ . udfmToList
+
emptyUDFM :: UniqDFM elt
emptyUDFM = UDFM M.empty 0