ADT views Re: [Haskell] Views in Haskell

David Roundy droundy at
Wed Jan 31 11:12:05 EST 2007

On Wed, Jan 31, 2007 at 05:53:08PM +0300, Bulat Ziganshin wrote:
> something like this:
> data Coord = Coord Float Float
> view of Coord = Polar Float Float where
>   Polar r d                    =   Coord (r*d) (r+d)    -- construction
>   Coord x y   | x/=0 || y/=0   =   Polar (x*y) (x+y)    -- matching

This is somewhat pretty, but in spite of your desire to avoid creating new
syntax, you have just done so, and in the process made views more limited.
Pattern matching sytax remains the same, but a new declaration syntax has
been added.  And now in order to pattern match on a function it needs to
explicitely be declared as a "view".

And unless you are planning to allow one-way views (you don't give any
examples of that), "view functions" must be invertible, which greatly
weakens their power.  If you choose to allow one-way views (non-invertible
functions), then I'd vote for not allowing two-way views, as it adds
complexity without adding any appreciable gain.

I don't like your use of capital letters for ordinary functions, I enjoy
having the syntax tell me whether (Foo 1) might or might not be an
expensive operation.

Finally, you've replaced Simon's explicit incomplete function using Maybe
with an implicit incomplete function that returns _|_ when the view doesn't
match.  I find this rather unappealing.  I certainly prefer *intentionally*
incomplete functions to return Maybe somthing, rather than just bombing out
when given invalid input.  I suppose you'll point out that the view Coord
is a function that you can never explicitely call, but to me that just
makes things even more confusing.  Now we're defining functions that we can
only use in pattern matching, but can never call.
David Roundy

More information about the Haskell-prime mailing list