継承やインタフェースはほんとうにいらないかもしれない

http://blog.livedoor.jp/gab_km/archives/1425937.html

だって、F#にはレコードがありますから。(いまさらのリアクションでごめんなさい)

type Animal = { name: string; bark: unit->string }

let makeDog name = 
  { name = name ; bark = fun () -> "Bow wow!"}

let makeCat name = 
  { name = name ; bark = fun () -> "meow"}

(* 継承っぽいこと *)
let makeTiger name =
  let cat = makeCat name
  { cat with bark = fun () -> cat.bark() + "!!!" }

let animals = [ makeDog "Pochi"; makeCat "Tama"; makeTiger "Tora" ]

animals 
|> Seq.map (fun a -> a.bark()) 
|> Seq.iter (printf "%A ")       // "Bow wow!" "meow" "meow!!!" 


F#に閉じて書くんなら継承やインタフェースはほんとうに使わなくて済むと思います。C#のコードから呼び出す、とかC#向けに拡張ポイント作るとなると大体のケースで避けられないですけど。