
#15125: Typeclass instance selection depends on the optimisation level -------------------------------------+------------------------------------- Reporter: nicuveo | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): I'm quite confused, as I can't seem to trigger this bug in GHC 8.4.2 (or HEAD). First, it's worth noting that the tarball you provided has a slightly different program than the one you gave in the original description. The modules in the tarball are: {{{#!hs {-# LANGUAGE FlexibleInstances #-} {-# OPTIONS_GHC -fno-warn-simplifiable-class-constraints #-} module A where import Data.Maybe class A a where someValue :: a -> Maybe Int instance {-# INCOHERENT #-} A a where someValue = const Nothing getInt :: A a => a -> Int getInt x = fromMaybe 0 $ someValue x }}} {{{#!hs module B where import A data B = B Int data C = C Int instance A B where someValue (B x) = Just x getBInt :: Int getBInt = getInt $ B 42 getCInt :: Int getCInt = getInt $ C 42 }}} {{{#!hs -- Main.hs import B main :: IO () main = do putStrLn "==========================================" putStrLn $ "B: " ++ show getBInt putStrLn $ "C: " ++ show getCInt }}} I'll use these, since the programs in the original description do not compile. Second, when I compile and run these with GHC 8.4.2, I get the same answer, regardless of optimization level: {{{ $ /opt/ghc/8.4.2/bin/ghc -O0 -fforce-recomp Main.hs [1 of 3] Compiling A ( A.hs, A.o ) [2 of 3] Compiling B ( B.hs, B.o ) [3 of 3] Compiling Main ( Main.hs, Main.o ) Linking Main ... $ ./Main ========================================== B: 42 C: 0 $ /opt/ghc/8.4.2/bin/ghc -O2 -fforce-recomp Main.hs [1 of 3] Compiling A ( A.hs, A.o ) [2 of 3] Compiling B ( B.hs, B.o ) [3 of 3] Compiling Main ( Main.hs, Main.o ) Linking Main ... $ ./Main ========================================== B: 42 C: 0 }}} So unless you're using a yet more different version of this program, I'm inclined to agree that there is no bug here. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15125#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler