[Haskell-cafe] MultiCase alternative

Baa aquagnu at gmail.com
Fri Jun 16 10:12:32 UTC 2017


> > Interesting, is F# can solve this problem with active pattern?  
> 
> Probably.  See
> https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/active-patterns
> for details of active patterns in F#.
> The syntax is seriously twisted.  You *can* associate
> data with the partitions, but it's really not obvious.
> If you want to classify something more than 7 ways F# is unhelpful.
> F# active patterns are not entirely unlike view patterns
> https://ghc.haskell.org/trac/ghc/wiki/ViewPatterns
> only stranger.

view patterns are "active" too, sure while they are callable :)
Unfortunately I am not so familiar with both to compare them in detail.
Are they equal in capacity/in general or only partially? I mean, can
Haskell view patterns cover all possibilities of Active Patterns of F#?

> >
> > Pattern matching in Haskell does not seem enought flexible, for
> > example, if I have `data D = D a b c d`, how can I match it without
> > placeholders for `D` args? Something like `D...`? I need to write
> > `D _ _ _ _` if I want to match without to bind args, right?  
> 
> Yes, but (a) in all seriousness, that's not much of a problem,
> surely and (b) there is an alternative.  If you write instead
> 
> data D a b c d = D { f1 :: a, f2 :: b, f3 :: c, f4 :: d }
> 
> then you can abbreviate patterns like this:
> 
> f (D{}) = ()
> 
> g (D{f1 = x}) = x
> 
> If you have enough fields for counting the placeholders to be a
> problem then you have enough fields that you really *ought* to be
> naming them anyway.

That it is, good! Thanks for this hint!

> The problem with making pattern matching overly flexible is that
> people have to read and understand this stuff.  It's a bit like
> regular expressions:  POSIX regular expressions can be implemented
> to take linear time (by simulating an NDFA), but they are a bit
> limited, whereas Perl regular expressions are very expressive
> indeed, but they can all too easily take exponential time, and it
> isn't easy for John and Jane Doe programmers to tell when that is
> going to happen.

Sure, true.

> Generally speaking, before proposing language changes, it's
> always a good idea to see if you can solve your problem by
> factoring out common stuff into a new function (or type, or
> typeclass) first.
> 

Sure, but there is another point of view here. Alternative is to have
flexible but elegant syntax embedded in language, instead of many-many
extensions for any possibility - they "fragment" language. But of course
this is controversial and ambiguous :-)

===
Best regards, Paul


More information about the Haskell-Cafe mailing list