Records in Haskell

Gábor Lehel illissius at gmail.com
Tue Jan 17 10:10:12 CET 2012


On Tue, Jan 17, 2012 at 9:59 AM, Yitzchak Gale <gale at sefer.org> wrote:
> By the way, thanks to Greg for driving this discussion,
> please keep up the good work!
>
> Simon Peyton-Jones wrote:
>> Can you turn your proposal into a Wiki page?
>
> OK I'll try to get to that later today.
>
>> It's different to Johan's.
>
> Oh? I didn't realize that. OK, I'll look at it more closely.
> I'm basically just using modules the way they are,
> changing almost nothing.
>
> I wrote:
>>> [This has the additional advantage of giving SPJ
>>> motivation to remain engaged, because he seems
>>> to prefer B. :)]
>
>> True: but that's because I think that in the end A will
>> be deemed too clumsy, so we'll end with B anyway.
>> And I'd rather not do both.  But I'm quite open to
>> persuasion!
>
> I agree that B would be great! It just seems harder,
> and I'm worried that we'll get stuck again.
> As long as we are moving forward productively towards
> a solution to B, I'm happy with that.
> I'm trying to suggest a simple, workable approach to A
> as a backup.
>
>> OK, so consider this:
>>        module M where
>>          module T where
>>            data T = MkT { x :: Int }
>>          module S where
>>            data S = MkS { x :: Int }
>> So inside M I can refer to T.x and S.x.
>> Fine!  What does M export?
>
> As it stands, M exports nothing. In my scheme, nested modules
> have almost exactly the same meaning as they would have
> if they were written as separate modules. So far, the only
> differences are: "module T" is syntactic sugar for "module M.T",
> and there are implied import statements added to M, T, and S.
>
> So an module external to M that wants to use T or S would
> need to import them explicitly in addition to the import of M.
> The usual rules would then apply.
>
> Based on your comments, I see that another optional
> enhancement to my proposal could be as follows:
>
> Whenever any module E imports M unqualified without an
> import list, as in:
>
> import M
>
> then the following implied imports would be added to E:
>
> import qualified M.T as T
> import qualified M.S as S
>
> and whenever E imports M qualified without an
> import list, as in:
>
> import qualified M as Q
>
> then the following implied imports would be
> added to E:
>
> import qualified M.T as Q.T
> import qualified M.S as Q.S

I like this and would like to have it independently of which records
system is chosen.

>
> Similarly, if M also contains more deeply nested
> modules and E imports M either qualified or
> unqualified without an import list, the corresponding
> implied imports of the deeply nested modules would
> also be added to E. But in fact, this is nothing
> more than a recursive application of the previous
> rule.
>
> Note that an import statement with an import list
> will never generate any automatic import of
> a nested module.
>
> I will add this additional enhancement to the wiki
> page (when I write it).
>
> Thanks,
> Yitz
>
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users



-- 
Work is punishment for failing to procrastinate effectively.



More information about the Glasgow-haskell-users mailing list