次の 2 つのタイプを検討してください。
data Point=Point{x::Float,y::Float}
data Rectangle = {upperLeft::Point, bottomRight::Point}
data Square = {upperLeft::Point, bottomRight::Point}
ghc コンパイラは、Rectangle の upperLeft フィールド名が Square のフィールド名と競合していると文句を言います。各フィールド名は型の名前空間にある必要があるため、これは奇妙に思えます。そうしないと、フィールド名を再利用できません。それは十分に一般的な期待であると思います。
たとえば、変数を定義するには、次のように記述します。
let a=Rectangle{upperLeft=Point 2 3, bottomRight=Point 7 7}
let a=Square{upperLeft=Point 2 3, bottomRight=Point 7 7}
このことから、各フィールド名がそれぞれの型の名前空間内にあることが期待できるはずであることがわかります。
私の使用法は正しいですか、それとも私の期待は間違っていますか? これを修正する方法はありますか?