
#7102: Type family instance overlap accepted in ghci -------------------------------------+------------------------------------- Reporter: exbb2 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: GHCi | Version: 7.4.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC accepts | Unknown/Multiple invalid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by oerjan): Since you said not to mind Safe Haskell, I also found a similar unsoundness that uses loading of modules instead. All the modules can be `Safe`, but GHCi itself cannot have the flag set. {{{ {-# LANGUAGE Safe, TypeFamilies #-} module T1 where type family T a b }}} {{{ {-# LANGUAGE Safe, TypeFamilies #-} module T2 where import T1 type instance T a b = a from :: a -> T a b from = id }}} {{{ {-# LANGUAGE Safe, TypeFamilies #-} module T3 where import T1 type instance T a b = b to :: T a b -> b to = id }}} Now in GHCi: {{{ Prelude> :l T2 T3 [1 of 3] Compiling T1 ( T1.hs, interpreted ) [2 of 3] Compiling T3 ( T3.hs, interpreted ) [3 of 3] Compiling T2 ( T2.hs, interpreted ) Ok, modules loaded: T2, T1, T3. *T2> :m +T3 *T2 T3> let uc = to . from *T2 T3> uc 'a' :: Int 97 }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7102#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler