Работа с неполным сопоставлением с образцом в перечислениях

Есть ли какие-нибудь творческие способы обойти "слабые" перечисления .NET при сопоставлении с образцом? Я бы хотел, чтобы они работали аналогично DU. Вот как я сейчас с этим справляюсь. Есть какие-нибудь лучшие идеи?

[<RequireQualifiedAccess>]
module Enum =
  let unexpected<'a, 'b, 'c when 'a : enum<'b>> (value:'a) : 'c = //'
    failwithf "Unexpected enum member: %A: %A" typeof<'a> value //'

match value with
| ConsoleSpecialKey.ControlC -> ()
| ConsoleSpecialKey.ControlBreak -> ()
| _ -> Enum.unexpected value //without this, gives "incomplete pattern matches" warning
11
задан Daniel 20 May 2011 в 18:27
поделиться