[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