RE: [Template-haskell] Re: [Haskell] Proposal: Allow "\=" for field update in record update syntax
What exactly is it that TH doesn't support, that you want? Simon | -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On | Behalf Of S. Alexander Jacobson | Sent: 28 February 2005 10:32 | To: Sander Evers; template-haskell@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@haskell.org | http://www.haskell.org/mailman/listinfo/template-haskell
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@haskell.org [mailto:template-haskell-bounces@haskell.org] On | Behalf Of S. Alexander Jacobson | Sent: 28 February 2005 10:32 | To: Sander Evers; template-haskell@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@haskell.org | http://www.haskell.org/mailman/listinfo/template-haskell
participants (2)
-
S. Alexander Jacobson -
Simon Peyton-Jones