[Template-haskell] Re: [Haskell] Proposal: Allow "\=" for field update in record update syntax

S. Alexander Jacobson alex at alexjacobson.com
Mon Mar 7 11:45:41 EST 2005


Most generally, I use records all over the place in my code (is this 
bad style?), and the current syntax for record update is really 
unwieldy.

I'd like some way to have operators like (:=) and (:\=) for record 
update.  I don't yet know TemplateHaskell so I don't know how you 
define functions in it, but I would like some way to write:

   name := val = \rec-> rec { name = val}
   name :\= fn = \rec -> rec { name = fn $ name rec}

And I would like to be able to use these operators as Sander Evers 
showed:

   data Country = Country {capital :: City, ...}
   data City = City {inhabitants :: Int, ...}

   birth_in_capital :: Country -> Country
   birth_in_capital = capital :\= (inhabitants :\= (+1))

It would be even nicer if we could define the precedence of these 
operators so that we could write the above

   birth_in_capital = capital :\= inhabitants :\= (+1)

Though since haskell is usually prefix, perhaps it would be best to be 
able to write it:

   birth_in_capital = (+1) :\= inhabitants :\= capital

Note: It is entirely possible that this is a Haskell rather than a 
template haskell issue.  I don't know the border between the projects.

-Alex-

______________________________________________________________
S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com



On Mon, 7 Mar 2005, Simon Peyton-Jones wrote:

> What exactly is it that TH doesn't support, that you want?
>
> Simon
>
> | -----Original Message-----
> | From: template-haskell-bounces at haskell.org
> [mailto:template-haskell-bounces at haskell.org] On
> | Behalf Of S. Alexander Jacobson
> | Sent: 28 February 2005 10:32
> | To: Sander Evers; template-haskell at haskell.org
> | Subject: [Template-haskell] Re: [Haskell] Proposal: Allow "\=" for
> field update in record update syntax
> |
> | Since operators can't start with a ':', is there an in-principle
> | reason TH does not support : operators?  The syntax below would be
> | really nice to have.
> |
> |
> |
> | On Fri, 18 Feb 2005, Sander Evers wrote:
> |
> | >
> | >> Then we could have e.g. (:=) and (:\=) and end up with a
> | >> syntax that looks like this:
> | >>
> | >>    rec // field :\= fn . field2 := val
> | >>
> | >> And that is BETTER than the Haskell syntax that I originally
> proposed.
> | >
> | > This syntax is also nice for composition of update functions, which
> is useful
> | > with nested records:
> | >
> | > data Country = Country {capital :: City, ...}
> | > data City = City {inhabitants :: Int, ...}
> | >
> | > birth_in_capital :: Country -> Country
> | > birth_in_capital = capital :\= (inhabitants :\= (+1))
> | >
> | > This also shows that it would be useful to make :\= associate to the
> right.
> | >
> |
> | ______________________________________________________________
> | S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com
> | _______________________________________________
> | template-haskell mailing list
> | template-haskell at haskell.org
> | http://www.haskell.org/mailman/listinfo/template-haskell
>



More information about the template-haskell mailing list