元ネタはダブル・ディスパッチ~典型的なオブジェクト指向プログラミング・イディオム~ です。 これをF#でやってみるとどうなるかやってみましょう。 レンタルショップの例(レベル1) 商品としてCDやDVDを取り扱うレンタルショップを想像・・・するのは面倒でしょうから、コードで示しますね。 type MemberKind = | Common | Gold type Member = { Kind: MemberKind } type ItemKind = | CD | DVD type Item = { Kind: ItemKind } module RentalShop = let calculateRentalFee (item: Item) (member_: Member) = (* 金額を計算する *) レンタル料の計算が、商品種別と会員種別の組み合わせによって変わるようです。 一