[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