История изменений
Исправление Begemoth, (текущая версия) :
Вообще в нормальных языках этот паттерн вообще не нужен, он нужен только в ублюдочных недоязычках без алгебраических типов данных и сопоставления с образцом. Так что в нормальных языках все пишется гораздо проще:
type Wheel = { name : string ; ... }
type Engine = { ... }
type Body = { ... }
type CarElement = CarWheel of Wheel
| CarEngine of Engine
| CarBody of Body
let printCarElement = function
| Wheel { name = n } -> printfn "Wheel %s" n
| Engine _ -> printfn "Engine"
| Body _ -> printfn "Body"
Исходная версия Begemoth, :
Вообще в нормальных языках этот паттерн вообще не нужен, он нужен только в ублюдочных недоязычках без алгебраических типов данных и сопоставления с образцом. Так что в нормальных языках все пишется гораздо проще:
type Wheel = { name : string ; ... }
type Engine = { ... }
type Body = { ... }
type Car = { ... }
type CarElement = Wheel of Wheel
| Engine of Engine
| Body of Body
| Car of Car
let printCarElement = function
| Wheel { name = n } -> printfn "Wheel %s" n
| Engine _ -> printfn "Engine"
| Body _ -> printfn "Body"
| Car _ -> printfn "Car"