
#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