[Haskell-cafe] Cannot update a field in a record with a polymorphic type.
Henning Thielemann
lemming at henning-thielemann.de
Sun Sep 6 18:19:28 UTC 2020
On Sun, 6 Sep 2020, Ignat Insarov wrote:
> So, polymorphic types are not good enough to update. But see further:
>
> λ data Z α = Z {z₁, z₂ ∷ α}
> λ defaultZ = Z {z₁ = mempty, z₂ = mempty}
> λ :type (defaultZ ∷ ∀ α. Monoid α ⇒ Z α) {z₁ = "c"}
> (defaultZ ∷ ∀ α. Monoid α ⇒ Z α) {z₁ = "c"} :: Z [Char]
>
> — So when I have two fields it is suddenly fine to update a polymorphic field!
Z has only one type parameter. If you change the type of z1, you also
change the type of z2. In your example with z1="c" you set the type of z1
to String, but you also claim that the result is consistently typed, thus
z2 must also have type String. Since z2 was not touched, it must have the
same type in defaultZ. Thus GHCi can infer the type parameter of defaultZ.
More information about the Haskell-Cafe
mailing list