[GHC] #5144: Pattern synonyms
GHC
ghc-devs at haskell.org
Wed Aug 21 02:52:10 CEST 2013
#5144: Pattern synonyms
-------------------------------------+------------------------------------
Reporter: simonpj | Owner: cactus
Type: feature request | Status: new
Priority: normal | Milestone: _|_
Component: Compiler | Version:
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Comment (by cactus):
Exports now work with the following syntax:
{{{
module Foo (pattern P) where
pattern P x y = (x, y, 42)
}}}
This exports `P` both as a pattern and as an expression (if it's
bidirectional, like in the case here)
The extra `pattern` keyword is needed because pattern names live in the
constructor namespace, so it's perfectly valid to have
{{{
data P = C
pattern P = ()
}}}
(due to entirely non-interesting reasons, the implementation of exporting
is not yet pushed to https://github.com/gergoerdi/ghc/tree/pattern-
synonyms)
Remaining work to do:
* Sort out recursive pattern definitions. Currently these are rejected
implicitly by an internal GHC error, not exactly ideal... also, non-
recursive usages of pattern synonyms mentioning each other don't work, but
I see no reason why we wouldn't want to allow it:
{{{
pattern P1 = P2
pattern P2 = ()
}}}
* The typechecker for pattern synonym definitions is wrong: it returns
monomorphic types (e.g. for `pattern Head x = x:_`, it infers type `t ->
[t]` instead of `forall a. a -> [a]`. This is worked around by a horrible
hack when typechecking pattern synonym usages in patterns. Richard
Eisenberg and Simon Peyton Jones have already offered to help with this.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/5144#comment:20>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list