Skip to content

Scoped type variables in pattern synonyms

Unsure of pattern synonym scoping rules. I want to be able to refer to a type in the signature (assuming symbol from #11349):

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:

-- • 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?

Edited by Icelandjack
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information