厄介なエラーがあります。
type Animal =
abstract member Name : string
type Dog (name : string) =
interface Animal with
member this.Name : string =
name
let pluto = new Dog("Pluto")
let name = pluto.Name
最後の行、具体的には「Name」は、「フィールド、コンストラクター、またはメンバー'Name'が定義されていません」というコンパイラエラーを生成します。
私が使用した回避策は、書くことです
let name = (pluto :> Animal).Name
ただし、これは非常に煩わしく、多くの視覚的なノイズを生成します。NameがAnimalタイプから派生したメンバーであることをコンパイラーに明示的に通知せずに、Nameを解決できるようにするためにF#でできることはありますか?