[GHC] #11351: Scoped type variables in pattern synonyms

GHC ghc-devs at haskell.org
Wed Jan 6 18:42:07 UTC 2016


#11351: Scoped type variables in pattern synonyms
-------------------------------------+-------------------------------------
        Reporter:  Iceland_jack      |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler (Type    |              Version:  8.1
  checker)                           |
      Resolution:                    |             Keywords:
Operating System:  Linux             |         Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by Iceland_jack:

Old description:

> Unsure of pattern synonym scoping rules.
> I want to be able to refer to a type in the signature (assuming `symbol`
> from #11349):
>
> {{{#!hs
> symbol :: forall s. KnownSymbol s => String
> symbol = symbolVal @s Proxy
>
> -- Not in scope: type variable ‘s’
> -- Not in scope: type variable ‘s’
> pattern Symbol :: forall s. KnownSymbol s => String
> pattern Symbol <- ((== symbol @s) -> True) where
>          Symbol = symbol @s
> }}}
>
> Without `TypeApplications`:
>
> {{{#!hs
> -- • Could not deduce (KnownSymbol n0)
> --     arising from a use of ‘symbolVal’
> --   from the context: KnownSymbol s
> --     bound by the type signature for pattern synonym ‘Symbol’:
> --                String
> pattern Symbol :: forall s. KnownSymbol s => String
> pattern Symbol <- ((== symbolVal (Proxy :: Proxy s)) -> True)
> }}}
>
> but it (GHCi, version 8.1.20160102) says the type variable `s` is not in
> scope. The desired outcome would be something like (this touches on
> ticket #11350):
>
> {{{#!hs
> >>> Symbol @"blessed duck"
> "blessed duck"
>
> isDuck :: String -> Bool
> isDuck (Symbol @"duck") = True
> isDuck _                = False
> }}}
>
> With a nudge and a wink to #9671.

New description:

 Unsure of pattern synonym scoping rules.
 I want to be able to refer to a type in the signature (assuming `symbol`
 from #11349):

 {{{#!hs
 symbol :: forall s. KnownSymbol s => String
 symbol = symbolVal @s Proxy

 -- Not in scope: type variable ‘s’
 -- Not in scope: type variable ‘s’
 pattern Symbol :: forall s. KnownSymbol s => String
 pattern Symbol <- ((== symbol @s) -> True) where
          Symbol = symbol @s
 }}}

 Without `TypeApplications`:

 {{{#!hs
 -- • Could not deduce (KnownSymbol n0)
 --     arising from a use of ‘symbolVal’
 --   from the context: KnownSymbol s
 --     bound by the type signature for pattern synonym ‘Symbol’:
 --                String
 pattern Symbol :: forall s. KnownSymbol s => String
 pattern Symbol <- ((== symbolVal (Proxy :: Proxy s)) -> True)
 }}}

 but it (GHCi, version 8.1.20160102) says the type variable `s` is not in
 scope. Is this intentional?

--

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


More information about the ghc-tickets mailing list