考慮以下兩種類型:如何將haskell字段名稱放在不同的名稱空間中?
data Point=Point{x::Float,y::Float}
data Rectangle = {upperLeft::Point, bottomRight::Point}
data Square = {upperLeft::Point, bottomRight::Point}
的GHC編譯器抱怨說,在與該廣場的矩形衝突upperLeft字段名。這看起來很奇怪,因爲在它的表面上,每個字段名稱應該在類型的名稱空間中,否則不能重複使用字段名稱,並且我懷疑這會是一種常見的期望。
例如定義我們寫了一個變量:
let a=Rectangle{upperLeft=Point 2 3, bottomRight=Point 7 7}
let a=Square{upperLeft=Point 2 3, bottomRight=Point 7 7}
從這裏我們可以看到,我們應該能夠期待每個字段的名稱應該是各自類型的命名空間內。
我的用法是否正確或我的期望是否錯誤?有沒有辦法解決這個問題?
將每種類型放置在其自己的模塊中似乎是一個矯枉過正的問題。我意識到accessor函數已經創建,但我希望類型推斷能夠選擇正確的字段名稱來使用。 –
是的,我同意在這種情況下分離模塊感覺像是矯枉過正。我可能只是改變字段名稱。像'rectUpperLeft'這樣的東西不比'upperLeft'長。 我同意重複使用字段名稱似乎是一個有用的和合理的事情期望,但據我所知,你不能用Haskell的記錄做到這一點。 – astrieanna