
Christian Maeder
voidcast :: Fields a -> Fields Void voidcast v@(VariantWithTwo{}) = v { field1 = Void , field2 = Void } voidcast v@(VariantWithOne{}) = v { field1 = Void }
I would not expect that updating only field1 can change the type of v. The right thing is to construct a new value. This looks as follows with record syntax:
voidcast VariantWithTwo{} = VariantWithTwo { field1 = Void , field2 = Void } voidcast VariantWithOne{} = VariantWithOne { field1 = Void }
Ah, but the reason I want to use field update, rather than a new construction on the rhs, is that my type really has lots of other fields (not mentioned here), which are all of fixed definite types (not parametric). It is much nicer to be able to write v { field1 = Void } than VariantWithOne { field1 = Void , field2 = field2 v , field3 = field3 v , field4 = field4 v , field5 = field5 v ... } which has so much more scope for making a mistake, not to mention the extra maintainance work required if I ever add or delete a field from the type. Regards, Malcolm