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

GHC ghc-devs at haskell.org
Mon Jan 4 20:10:35 UTC 2016


#11351: Scoped type variables in pattern synonyms
-------------------------------------+-------------------------------------
           Reporter:  Iceland_jack   |             Owner:
               Type:  feature        |            Status:  new
  request                            |
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.1
  (Type checker)                     |
           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:
-------------------------------------+-------------------------------------
 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.

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


More information about the ghc-tickets mailing list