aşağıdaki iki tür düşünün:Haskell alan adlarını farklı ad boşluklarına nasıl yerleştirirsiniz?
data Point=Point{x::Float,y::Float}
data Rectangle = {upperLeft::Point, bottomRight::Point}
data Square = {upperLeft::Point, bottomRight::Point}
ghc derleyici şikayet olduğunu Meydanı bununla Dikdörtgen çatışmalarda upperLeft alan adı. Bu, her alan adının türün ad alanında olması gerektiği gibi görünüyor, aksi halde alan adlarını yeniden kullanamazsınız ve bunun yeterince ortak bir beklenti olacağından şüpheleniyorum. Biz her alan adı kendi türü ad alanı içinde olması gerektiğini beklemek yapabilmelidir görebilirsiniz Bundan
let a=Rectangle{upperLeft=Point 2 3, bottomRight=Point 7 7}
let a=Square{upperLeft=Point 2 3, bottomRight=Point 7 7}
: Biz yazma bir değişken tanımlamak için Örneğin
.
Kullanımım doğru mu, yoksa beklentilerim yanlış mı? Bunu düzeltmek için bir yer var mı?
Her türün kendi modülüne yerleştirilmesi aşırı bir şey gibi görünüyor. Erişim fonksiyonlarının yaratıldığını anladım, ancak daha sonra tür çıkarımının kullanılacak doğru alan adını seçeceğini umuyordum. –
Evet, bu durumda modüllere ayrılmanın aşırı hız gibi hissettiğine katılıyorum. Muhtemelen alan isimlerini değiştiririm. RectUpperLeft gibi bir şey, "upperLeft" den daha uzun bir ton değildir. Alan adlarını yeniden kullanmanın beklediğiniz faydalı ve makul bir şey gibi göründüğünü kabul ediyorum, ancak bildiğim kadarıyla bunu Haskell'in kayıtları ile yapamazsınız. – astrieanna