\begin{code}
module NewDemand(
Demand(..), Keepity(..), Deferredness(..),
- topDmd, lazyDmd, seqDmd, evalDmd, isStrictDmd,
+ topDmd, lazyDmd, seqDmd, evalDmd, isStrictDmd, isAbsentDmd,
DmdType(..), topDmdType, mkDmdType, mkTopDmdType,
dmdTypeDepth, dmdTypeRes,
ppr (DmdType fv ds res)
= hsep [text "DmdType",
hcat (map ppr ds) <> ppr res,
- braces (fsep (map pp_elt (ufmToList fv)))]
+ if null fv_elts then empty
+ else braces (fsep (map pp_elt fv_elts))]
where
pp_elt (uniq, dmd) = ppr uniq <> text "->" <> ppr dmd
+ fv_elts = ufmToList fv
instance Outputable DmdResult where
ppr TopRes = empty -- Keep these distinct from Demand letters
isStrictDmd (Call _) = True
isStrictDmd other = False
+isAbsentDmd :: Demand -> Bool
+isAbsentDmd Bot = True
+isAbsentDmd Err = True
+isAbsentDmd Abs = True
+isAbsentDmd other = False
+
instance Outputable Demand where
ppr Lazy = char 'L'
ppr Abs = char 'A'