2009/1/15 Peter Verswyvelen <bugfact@gmail.com>
When I first read about active patterns in F#, I found it really cool idea, since it allows creating fake data constructors that can be used for pattern matching, giving many views to a single piece of data, and allowing backwards compatibility when you completely change or hide a data structure.

So for example one could define a Polar pattern and a Rect pattern that give different views of a Complex number, e.g (pseudo code follows)

pattern Polar c = (mag c, phase c)
pattern Rect c = (real c, imag c)

This seems handy:

polarMul (Polar m1 p1) (Polar m2 p2) = mkComplexFromPolar (m1*m2) (p1+p2)

However, I think it is flawed, since the following

case c of 
     Polar _ _ -> "it's polar!"
     Rect _ _ -> "it's rect!"

seems like valid code but does not make any sense.

I think it's okay, given that we understand the meanings involved.  To me it makes about as much sense as this;

case c of
    x -> "it's x!"
    y -> "it's y!"
 
Which is just wrong code.

Maybe the capital letters on Polar and Rect are the confusing bit?

Luke