は、次の2つのタイプを考えてみましょう:異なる名前空間にhaskellフィールド名を配置する方法は?
data Point=Point{x::Float,y::Float}
data Rectangle = {upperLeft::Point, bottomRight::Point}
data Square = {upperLeft::Point, bottomRight::Point}
GHCコンパイラは文句を言い、その広場のそれと長方形の競合における左上のフィールド名。これは、それぞれのフィールド名がその型の名前空間になければならないという点では奇妙に思えます。そうでなければ、フィールド名を再利用することはできません。我々は、各フィールド名は、それぞれのタイプの名前空間内でなければならないことを期待することができるはずであることがわかります。このことから
let a=Rectangle{upperLeft=Point 2 3, bottomRight=Point 7 7}
let a=Square{upperLeft=Point 2 3, bottomRight=Point 7 7}
:私たちは書き込み変数を定義するために例えば
。
私の使用法は正しいですか?私の期待は間違っていますか?これを修正するために幾分か?
それぞれのタイプを独自のモジュールに配置することは、過剰なものに見えます。アクセサー関数が作成されたことに気付きましたが、タイプ推論で正しいフィールド名を選択することを望んでいました。 –
はい、私はモジュールに分割するこのケースでは、過剰な使用のように感じることに同意します。私はフィールド名を変更するだけだろう。 'rectUpperLeft'のようなものは' upperLeft'より長いトンではありません。 私はフィールド名の再利用が有用で妥当なものと思われることに同意しますが、私が知る限り、あなたはハスケルの記録でそれを行うことはできません。 – astrieanna