
#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