<div dir="ltr">You can record match like so "x@D{}" but then you'll need someway to access the contents of "x" (if you're interested in the contents, that is).</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 16, 2017 at 3:43 PM, Baa <span dir="ltr"><<a href="mailto:aquagnu@gmail.com" target="_blank">aquagnu@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello, Richard.<br>
<br>
As a result I did with "...where f c = ..." :) A way with "which" is<br>
interesting but duplicates unique constructors (A -> A', B -> B').<br>
<br>
Interesting, is F# can solve this problem with active pattern?<br>
<br>
Pattern matching in Haskell does not seem enought flexible, for<br>
example, if I have `data D = D a b c d`, how can I match it without<br>
placeholders for `D` args? Something like `D...`? I need to write<br>
`D _ _ _ _` if I want to match without to bind args, right?<br>
<br>
I want to say, that may be (I'm not sure, I'm newbie in Haskell) active<br>
patterns can solve this and many other problems, may be active-pattern<br>
+ reflection. For last example, I create pattern `IsD` in place where<br>
`D` is defined and use it - to be more independent on D args (D can be<br>
record and I can use getters/lens only to access its args, so I need a<br>
way to be similar independent from its args in pattern-matching too).<br>
<br>
But again, I'm not sure about right approaches - I'm newbie yet.<br>
<br>
<br>
===<br>
Best regards, Paul<br>
<div class="HOEnZb"><div class="h5"><br>
> There is another elementary alternative.  If you need to treat C and<br>
> D the same in just one place, you don't really have a problem.  If<br>
> you need to treat them the same in several places, do this:<br>
><br>
> data T a b c = A a | B b | C c | D c  -- existing type<br>
><br>
> data Which a b c = A' a | B' b | CD Bool c<br>
><br>
> which :: T a b c -> Which a b c<br>
> which (A a) = A' a<br>
> which (B b) = B' b<br>
> which (C c) = CD False c<br>
> which (D c) = CD True  c<br>
><br>
> then<br>
>     case which $ x of<br>
>       A' a -><br>
>       B' b -><br>
>       CD _ c -> ...<br>
><br>
> If you want to merge the C and D cases often, I like this approach,<br>
> otherwise the<br>
>     C c -> f c<br>
>     D c -> f c<br>
>     where f c = ...<br>
> approach is better.<br>
><br>
> ______________________________<wbr>_________________<br>
> Haskell-Cafe mailing list<br>
> To (un)subscribe, modify options or view archives go to:<br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
> Only members subscribed via the mailman list are allowed to post.<br>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</div></div></blockquote></div><br></div>