
#9793: Some as-patterns could be accepted in pattern synonyms -------------------------------------+------------------------------------- Reporter: cactus | Owner: cactus Type: feature request | Status: patch Priority: normal | Milestone: 8.0.1 Component: Compiler (Type | Version: 7.8.3 checker) | Keywords: Resolution: | PatternSynonyms Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1666 Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Hang on. What is the ''design'' here? Specifically, what is the semantics of matching? To put it another way, suppose I have {{{ pattern P x <- x@(Right _) }}} What does it mean to match against ''that''? Well, to a first approximation, in a pattern, `P pat` means the same as `<rhs of P> with pat instead of x`. So {{{ f (P (Left y)) = e }}} means {{{ f ((Left y)@(Right _)) = e }}} And what does ''that'' mean? Perhaps we could expand the semantics of as-patterns to be `p1 @ p2`, meaning match against ''both'' `p1` ''and'' `p1`. An "and-pattern" if you like. Now everything would be well-specified. And I suppose you could say things like {{{ f ((\xs -> length xs < 10) -> True)@(y:_) = ... }}} which would match against a list of length shorter than 10, and then bind 'y' to the head of that list. But this is a bigger change, and not directly related to pattern synonyms. So far I'm unconvinced. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9793#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler