Martin Sj�gren wrote:
>On Tue, 16 Nov 2004 15:04:02 +0000, Ian Lynagh <[EMAIL PROTECTED]> wrote:
>
>>Hi all,
>>
>>Is there a good reason why I can't say
>>
>> data Bar = Bar { _ :: Int, _ :: Char, x :: Bool }
>>
>>?
>
>I agree that it would be useful, but wouldn't
> data Bar = Bar Int Char { x :: Bool }
>make more sense as far as syntax goes?It's a bit problematic because of the current all-at-once behavior of labeled construction. One would presumably want to construct a Bar with an expression like
Bar 3 'c' { x = False }But that won't work because the brace notation has a higher precedence than function application (!). You'd have to write
(Bar 3 'c') { x = False }I guess you could give Bar the type (Int -> Char -> Bar), with the understanding that it initializes x to _|_, and treat the { x = False } as an update. But to be consistent, the data constructor in a declaration like
data Quux = Quux { x :: Int, y :: Char, z :: Bool }ought to have the type Quux then, not (Int -> Char -> Bool -> Quux) as it does currently. And none of this is going to work if your labeled field is in any position except the last.
-- Ben
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
