[GHC] #10997: Pattern synonym causes Iface error.

GHC ghc-devs at haskell.org
Wed Oct 21 11:51:45 UTC 2015


#10997: Pattern synonym causes Iface error.
-------------------------------------+-------------------------------------
        Reporter:  mpickering        |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  7.10.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:                    |
-------------------------------------+-------------------------------------
Description changed by mpickering:

Old description:

> From the mailing list..
>
> Hello,
>
> We have a pattern synonym as follows
>
> type family Showable (a :: k) :: Constraint where
>   Showable (a :: *) = (Show a)
>   Showable a       = ()
>
> pattern Just' :: () => (Showable a) => a -> (Maybe a)
> pattern Just' a <- (extractJust -> (True, a)) where
>   Just' a = Just a
>
> When we try to use the pattern in a different package, the error was
>
>     [1 of 1] Compiling Bar              ( Bar.hs, .stack-
> work/dist/x86_64-linux/Cabal-1.22.4.0/build/Bar.o )
>     /tmp/test/p2/.stack-
> work/install/x86_64-linux/lts-3.5/7.10.2/lib/x86_64-linux-
> ghc-7.10.2/p1-0.1.0.0-I5t4il6dN7vIqsT1XgYsM3/Foo.hi
>     Declaration for Just'
>     Pattern synonym Just':
>       Iface type variable out of scope:  k
>     Cannot continue after interface file error
>
> The error only occurred when Showable was polykinded and we used synonym
> in a different package . Using the synonym in the same package works
> fine.
>
> This problem did not happen with the following definition of (non
> polykinded ) Showable
>
> type family Showable a :: Constraint where
>   Showable a = (Show a)

New description:

 From the mailing list..

 Hello,

 We have a pattern synonym as follows

 {{{
 type family Showable (a :: k) :: Constraint where
   Showable (a :: *) = (Show a)
   Showable a       = ()

 pattern Just' :: () => (Showable a) => a -> (Maybe a)
 pattern Just' a <- (extractJust -> (True, a)) where
   Just' a = Just a
 }}}

 When we try to use the pattern in a different package, the error was

 {{{
     [1 of 1] Compiling Bar              ( Bar.hs, .stack-
 work/dist/x86_64-linux/Cabal-1.22.4.0/build/Bar.o )
     /tmp/test/p2/.stack-
 work/install/x86_64-linux/lts-3.5/7.10.2/lib/x86_64-linux-
 ghc-7.10.2/p1-0.1.0.0-I5t4il6dN7vIqsT1XgYsM3/Foo.hi
     Declaration for Just'
     Pattern synonym Just':
       Iface type variable out of scope:  k
     Cannot continue after interface file error
 }}}

 The error only occurred when Showable was polykinded and we used synonym
 in a different package . Using the synonym in the same package works fine.

 This problem did not happen with the following definition of (non
 polykinded ) Showable

 {{{
 type family Showable a :: Constraint where
   Showable a = (Show a)
 }}}

--

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


More information about the ghc-tickets mailing list