[GHC] #12550: Inconsistent unicode display for kinds

GHC ghc-devs at haskell.org
Sun Aug 28 21:36:22 UTC 2016


#12550: Inconsistent unicode display for kinds
---------------------------------+--------------------------------------
        Reporter:  johnleo       |                Owner:  johnleo
            Type:  bug           |               Status:  new
        Priority:  normal        |            Milestone:
       Component:  Compiler      |              Version:  8.0.1
      Resolution:                |             Keywords:
Operating System:  MacOS X       |         Architecture:  x86_64 (amd64)
 Type of failure:  None/Unknown  |            Test Case:
      Blocked By:                |             Blocking:
 Related Tickets:                |  Differential Rev(s):
       Wiki Page:                |
---------------------------------+--------------------------------------
Description changed by johnleo:

@@ -54,0 +54,4 @@
+
+ :t (:*:)
+ (:*:) ∷ ∀ {g ∷ ★ → *} {p} {f ∷ ★ → *}. f p → g p → (:*:) ★ f g p
+ -- Note that  ★ and * are reversed from what :i displays!

New description:

 With `:set -fprint-unicode-syntax`, the kind `*` should always be printed
 as `★`.  However the output is extremely inconsistent.  Here are a few
 examples from ghci, and I will add more as I run across them.

 {{{
 :t fmap
 fmap ∷ ∀ {f ∷ ★ → ★} {a} {b}. Functor f ⇒ (a → b) → f a → f b

 :i fmap
 class Functor (f ∷ * → *) where
   fmap ∷ forall a b. (a → b) → f a → f b
 -- (note that forall is also not displayed properly as ∀ here)

 :k Functor
 Functor ∷ (★ → ★) → Constraint

 :m + GHC.Generics

 :i Functor
 -- (among other output)
 instance ∀ (f ∷ * → ★). Functor f ⇒ Functor (Rec1 f)
   -- Defined in ‘GHC.Generics’
 instance Functor Par1 -- Defined in ‘GHC.Generics’
 instance ∀ i (c ∷ Meta) (f ∷ * → ★). Functor f ⇒ Functor (M1 i c f)
   -- Defined in ‘GHC.Generics’
 instance ∀ i c. Functor (K1 i c) -- Defined in ‘GHC.Generics’
 instance ∀ (f ∷ * → ★) (g ∷ * → *).
          (Functor f, Functor g) ⇒
          Functor (f :.: g)
   -- Defined in ‘GHC.Generics’
 instance ∀ (f ∷ * → ★) (g ∷ * → ★).
          (Functor f, Functor g) ⇒
          Functor (f :+: g)
   -- Defined in ‘GHC.Generics’
 instance ∀ (f ∷ * → ★) (g ∷ * → ★).
          (Functor f, Functor g) ⇒
          Functor (f :*: g)
   -- Defined in ‘GHC.Generics’

 :t datatypeName
 datatypeName
   ∷ ∀ {d} {t ∷ ★ → (* → *) → ★ → ★} {f ∷ * → *} {a}.
     Datatype ★ d ⇒
     t d f a → [Char]

 :i datatypeName
 class Datatype k (d ∷ k) where
   datatypeName ∷ forall {k1} (t ∷ k → (* → *) → k1 → *) (f ∷ *
                                                              → *) (a ∷
 k1).
                  t d f a → [Char]
   ...
         -- Defined in ‘GHC.Generics’

 :t (:*:)
 (:*:) ∷ ∀ {g ∷ ★ → *} {p} {f ∷ ★ → *}. f p → g p → (:*:) ★ f g p
 -- Note that  ★ and * are reversed from what :i displays!
 }}}

 Note that `:t datatypeName` causes a panic in 8.1; I have filed a separate
 bug [https://ghc.haskell.org/trac/ghc/ticket/12549]

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12550#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list