[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