[GHC] #13672: Pattern match on LHS of pattern synonym declaration
GHC
ghc-devs at haskell.org
Tue May 9 16:18:41 UTC 2017
#13672: Pattern match on LHS of pattern synonym declaration
-------------------------------------+-------------------------------------
Reporter: Iceland_jack | Owner: (none)
Type: feature | Status: new
request |
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Keywords: | Operating System: Unknown/Multiple
PatternSynonyms |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Changing `ZipList` to a newtype
{{{#!hs
import Data.Bifunctor.Fix
import Data.Bifunctor.Tannen
type ZipList = Fix (Tannen Maybe (,))
pattern Nil :: ZipList a
pattern Nil = In (Tannen Nothing)
infixr 5 :::
pattern (:::) :: a -> ZipList a -> ZipList a
pattern a:::as = In (Tannen (Just (as, a)))
}}}
works fine for the `Nil` pattern synonym (it remains implicitly
bidirectional)
{{{#!hs
newtype ZipList a = ZL (Fix (Tannen Maybe (,)) a)
pattern Nil :: ZipList a
pattern Nil = ZL (In (Tannen Nothing))
}}}
but `(:::)` needs to be explicitly bidirectional
{{{#!hs
infixr 5 :::
pattern (:::) :: a -> ZipList a -> ZipList a
pattern a:::as <- ZL (In (Tannen (Just (ZL -> as, a))))
where a:::ZL as = ZL (In (Tannen (Just (as, a))))
}}}
----
I would like to write it as
{{{#!hs
pattern (:::) :: a -> ZipList a -> ZipList a
pattern a:::ZL as = ZL (In (Tannen (Just (as, a))))
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13672>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list