Overloaded record fields
Edward Kmett
ekmett at gmail.com
Wed Jun 26 22:53:51 CEST 2013
Note: the lens solution already gives you 'reverse function application'
with the existing (.) due to CPS in the lens type.
-Edward
On Wed, Jun 26, 2013 at 4:39 PM, Simon Peyton-Jones
<simonpj at microsoft.com>wrote:
> | record projections. I would prefer to have dot notation for a
> | general, very tightly-binding reverse application, and the type of the
> record
> | selector for a field f changed to "forall r t. r { f :: t } => r -> t"
> | instead of "SomeRecordType -> t". Such a general reverse application
> dot would
> | allow things like "string.toUpper" and for me personally, it would
> | make a Haskell OO library that I'm working on more elegant...
>
> Actually I *hadn't* considered that. I'm sure it's been suggested before
> (there has been so much discussion), but I had not really thought about it
> in the context of our very modest proposal.
>
> We're proposing, in effect, that ".f" is a postfix function with type
> "forall r t. r { f :: t } => r -> t". You propose to decompose that idea
> further, into (a) reverse function application and (b) a first class
> function f.
>
> It is kind of weird that
> f . g means \x. f (g x)
> but f.g means g f
>
> but perhaps it is not *more* weird than our proposal.
>
> Your proposal also allows things like
>
> data T = MkT { f :: Int }
>
> foo :: [T] -> [Int]
> foo = map f xs
>
> because the field selector 'f' has the very general type you give, but the
> type signature would be enough to fix it. Or, if foo lacks a type
> signature, I suppose we'd infer
>
> foo :: (r { f::a }) => [r] -> [a]
>
> which is also fine.
>
> It also allows you to use record field names in prefix position, just as
> now, which is a good thing.
>
> In fact, your observation allows us to regard our proposal as consisting
> of two entirely orthogonal parts
> * Generalise the type of record field selectors
> * Introduce period as reverse function application
>
> Both have merit.
>
> Simon
>
> | -----Original Message-----
> | From: glasgow-haskell-users-bounces at haskell.org [mailto:
> glasgow-haskell-users-
> | bounces at haskell.org] On Behalf Of Dominique Devriese
> | Sent: 26 June 2013 13:16
> | To: Adam Gundry
> | Cc: glasgow-haskell-users at haskell.org
> | Subject: Re: Overloaded record fields
> |
> | I think it's a good idea to push forward on the records design because
> | it seems futile to hope for an ideal consensus proposal.
> |
> | The only thing I dislike though is that dot notation is special-cased to
> | record projections. I would prefer to have dot notation for a
> | general, very tightly-binding reverse application, and the type of the
> record
> | selector for a field f changed to "forall r t. r { f :: t } => r -> t"
> | instead of
> | "SomeRecordType -> t". Such a general reverse application dot would
> | allow things like "string.toUpper" and for me personally, it would
> | make a Haskell OO library that I'm working on more elegant...
> |
> | But I guess you've considered such a design and decided against it,
> | perhaps because of the stronger backward compatibility implications of
> | changing the selectors' types?
> |
> | Dominique
> |
> | 2013/6/24 Adam Gundry <adam.gundry at strath.ac.uk>:
> | > Hi everyone,
> | >
> | > I am implementing an overloaded record fields extension for GHC as a
> | > GSoC project. Thanks to all those who gave their feedback on the
> | > original proposal! I've started to document the plan on the GHC wiki:
> | >
> | >
> http://hackage.haskell.org/trac/ghc/wiki/Records/OverloadedRecordFields/Plan
> | >
> | > If you have any comments on the proposed changes, or anything is
> unclear
> | > about the design, I'd like to hear from you.
> | >
> | > Thanks,
> | >
> | > Adam Gundry
> | >
> | > _______________________________________________
> | > Glasgow-haskell-users mailing list
> | > Glasgow-haskell-users at haskell.org
> | > http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
> |
> | _______________________________________________
> | Glasgow-haskell-users mailing list
> | Glasgow-haskell-users at haskell.org
> | http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20130626/f591c95b/attachment.htm>
More information about the Glasgow-haskell-users
mailing list