
#12447: Pretty-printing of equality `~` without parentheses -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 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 Iceland_jack): Same with {{{#!hs {-# Language KindSignatures, TypeOperators #-} import Data.Kind import Data.Type.Equality class Foo (p :: Constraint) instance Foo (a ~ b) instance Foo (a ~~ b) }}} {{{ $ ghci -ignore-dot-ghci /tmp/tOrO.hs GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help [1 of 1] Compiling Main ( /tmp/tOrO.hs, interpreted ) Ok, modules loaded: Main. *Main> :i Foo class Foo (p :: Constraint) -- Defined at /tmp/tOrO.hs:6:1 instance [safe] Foo a ~ b -- Defined at /tmp/tOrO.hs:8:10 }}} {{{ *Main> :set -fprint-equality-relations *Main> :i Foo class Foo (p :: Constraint) -- Defined at /tmp/tOrO.hs:6:1 instance [safe] Foo (a :: *) ~~ (b :: *) -- Defined at /tmp/tOrO.hs:8:10 }}} Should be ` {{{ *Main> :i Foo class Foo (p :: Constraint) -- Defined at /tmp/tOrO.hs:6:1 instance [safe] Foo (a ~ b) -- Defined at /tmp/tOrO.hs:8:10 *Main> :set -fprint-equality-relations *Main> :i Foo class Foo (p :: Constraint) -- Defined at /tmp/tOrO.hs:6:1 instance [safe] Foo ((a :: *) ~~ (b :: *)) -- Defined at /tmp/tOrO.hs:8:10 }}} ---- Is this the same as #12005, two instances are defined: {{{#!hs instance Foo (a ~ b) instance Foo (a ~~ b) }}} but only one displayed in `:info`: is the first subsumed by the latter? There is some funny business going on in the [https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Type- Equality.html#t:-126--126- definition of ‘~~’] so I don't know if those are separate instances. For example what is the difference between these two instances `↓`? {{{#!hs instance Foo (a ~ b) instance Foo ((a::Type) ~~ (b::Type)) }}} Again, only the latter is displayed: {{{#!hs *Main> :i Foo class Foo (p :: Constraint) -- Defined at /tmp/tOrO.hs:6:1 instance [safe] Foo a ~ b -- Defined at /tmp/tOrO.hs:8:10 *Main> :set -fprint-equality-relations *Main> :i Foo class Foo (p :: Constraint) -- Defined at /tmp/tOrO.hs:6:1 instance [safe] Foo (a :: *) ~~ (b :: *) -- Defined at /tmp/tOrO.hs:8:10 }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12447#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler