
Hello, Li-yao! I mean this: https://wiki.haskell.org/MultiCase
Hi Paul,
This looks like the or-patterns proposal:
https://github.com/ghc-proposals/ghc-proposals/pull/43
I'm not sure what you call MultiCase though. Is the above what you were refering to?
Here are some alternatives with current Haskell, the first one is to be preferred:
- Factor out the alternatives in a function.
... case x of ... C c -> f c D c -> f c where f c = ...
- If your C and D constructors have similar enough meanings, you might want to fuse them into a single constructor with a separate tag:
data T = A TA | B TB | CD CorD TC data CorD = C | D
so that you can write
case x of ... CD _ c -> ...
- With pattern synonyms + view patterns, although it takes some effort to set up and confuses the exhaustiveness checker.
matchCorD :: T -> Maybe C matchCorD (C c) = Just c matchCorD (D c) = Just c matchCorD _ = Nothing
pattern CD :: C -> T pattern CD c <- (matchCorD -> Just c)
you can now write
case x of ... CD c -> ...
Li-yao
On 06/15/2017 10:11 AM, Baa wrote:
Hello, Everyone!
As I understand "MultiCase" proposal was not approved, so my question is: is there alternatives to multi-case? I have code like:
case x of A a -> .. B b -> .. C c -> --same-- D c -> --same--
and I want to merge code of "C c" with "D c" branch. Anywhere, in general: is any alternatives to make "OR"s in patterns? I don't see how to do it with pattern guards, pattern synonyms, views extensions and don't see another related extensions.
Something like "(C|D) c -> ..."
=== Best regards, Paul _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.