[GHC] #16183: GHC HEAD regression: -ddump-splices incorrectly parenthesizes HsKindSig applications

GHC ghc-devs at haskell.org
Tue Jan 15 01:07:49 UTC 2019


#16183: GHC HEAD regression: -ddump-splices incorrectly parenthesizes HsKindSig
applications
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.8.1
       Component:  Template Haskell  |              Version:  8.7
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Debugging         |  Unknown/Multiple
  information is incorrect           |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by RyanGlScott:

Old description:

> When you compile this file with GHC 8.6.3 and HEAD:
>
> {{{#!hs
> {-# LANGUAGE KindSignatures #-}
> {-# LANGUAGE TemplateHaskell #-}
> {-# OPTIONS_GHC -ddump-splices #-}
> module Bug where
>
> import Data.Kind
>
> type F = $([t| (Maybe :: Type -> Type) Int |])
> }}}
>
> You get two different results:
>
> {{{
> $ /opt/ghc/8.6.3/bin/ghc -fforce-recomp Bug.hs
> [1 of 1] Compiling Bug              ( Bug.hs, Bug.o )
> Bug.hs:8:12-45: Splicing type
>     [t| (Maybe :: Type -> Type) Int |]
>   ======>
>     (Maybe :: Type -> Type) Int
>
> $ ~/Software/ghc4/inplace/bin/ghc-stage2 -fforce-recomp Bug.hs
> [1 of 1] Compiling Bug              ( Bug.hs, Bug.o )
> Bug.hs:8:12-45: Splicing type
>     [t| (Maybe :: Type -> Type) Int |]
>   ======>
>     Maybe :: Type -> Type Int
> }}}
>
> Notice how in the GHC HEAD output, GHC forgets to put parentheses around
> `Maybe :: Type -> Type`, leading to the utterly nonsensical type `Maybe
> :: Type -> Type Int`.
>
> The commit that introduced this regression is
> [https://gitlab.haskell.org/ghc/ghc/commit/ae2c9b40f5b6bf272251d1f4107c60003f541b62
> ae2c9b40f5b6bf272251d1f4107c60003f541b62].

New description:

 When you compile this file with GHC 8.6.3 and HEAD:

 {{{#!hs
 {-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# OPTIONS_GHC -ddump-splices #-}
 module Bug where

 import Data.Kind

 type F = $([t| (Maybe :: Type -> Type) Int |])
 }}}

 You get two different results:

 {{{
 $ /opt/ghc/8.6.3/bin/ghc -fforce-recomp Bug.hs
 [1 of 1] Compiling Bug              ( Bug.hs, Bug.o )
 Bug.hs:8:12-45: Splicing type
     [t| (Maybe :: Type -> Type) Int |]
   ======>
     (Maybe :: Type -> Type) Int

 $ ~/Software/ghc4/inplace/bin/ghc-stage2 -fforce-recomp Bug.hs
 [1 of 1] Compiling Bug              ( Bug.hs, Bug.o )
 Bug.hs:8:12-45: Splicing type
     [t| (Maybe :: Type -> Type) Int |]
   ======>
     Maybe :: Type -> Type Int
 }}}

 Notice how in the GHC HEAD output, GHC forgets to put parentheses around
 `Maybe :: Type -> Type`, leading to the utterly nonsensical type `Maybe ::
 Type -> Type Int`.

 The commit that introduced this regression is
 [https://gitlab.haskell.org/ghc/ghc/commit/bace26aadaafa4064e78f9ed088c1e2217221acc
 bace26aadaafa4064e78f9ed088c1e2217221acc].

--

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


More information about the ghc-tickets mailing list