
On Fri, Mar 02, 2012 at 01:04:13AM +0000, AntC wrote:
Let me explain better what I mean by "two private namespaces", then we'll try to understand how your proposal goes ...
module T where data FieldT = Field data RecT = RecT{ Field :: Int } ... module U where data FieldU = Field data RecU = RecU{ Field :: Bool } ... module V where import T -- also consider either/both import U -- imports hiding (Field) data RecV = RecV{ Field :: String } -- am I sharing this Field? -- who with?
Ah, I see. No, you couldn't do that, just as you couldn't do v = Field You would need to say data RecV = RecV{ T.Field :: String }
... r.Field ... -- is this valid?, if not what is?
r!T.Field (I took the liberty of using a random different symbol for field access, for clarity).
... r{ Field = e } -- likewise
r{ T.Field = e }
(Oh yeah, imports and hiding: how do I do that for these non-String-type-Kinds? And is this allowed?: data NotaField = Constr Int Bool data AmIaRec = AmI{ Constr :: String }
No. Thanks Ian