{-# OPTIONS_GHC -fwarn-unused-binds #-} module ShouldCompile() where foo x = x {-# NOINLINE [1] foo #-} -- #2497; test should compile without language -- pragmas to switch on the forall {-# RULES "id" forall (x :: a). foo x = x #-} -- #2213; eq should not be reported as unused eq,beq :: Eq a => a -> a -> Bool {-# NOINLINE [0] eq #-} -- The pragma and [~1] in the RULE are to prevent an infinite loop -- in the simplifier, where the RULE fires infinitely in its -- own RHS eq = (==) -- Used beq = (==) -- Unused {-# RULES "rule 1" [~1] forall x y. x == y = y `eq` x #-}