[Haskell-cafe] MultiCase alternative
Baa
aquagnu at gmail.com
Thu Jun 15 14:54:35 UTC 2017
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.
>
More information about the Haskell-Cafe
mailing list