Создать дискриминированное объединенное дело из строки

Я пытаюсь создать DU случаи из строк. Единственный способ увидеть это - перечислить случаи DU черезMicrosoft.FSharp.Reflection.FSharpType.GetUnionCases а затем выбираяUnionCase которая соответствует строке (используя.Name), а затем сделать фактический случай DU из этого с помощью.FSharpValue.MakeUnion

Isn»Есть ли более простой и элегантный способ сделать это? В моем сценарии у меня есть DU с парой сотен случаев для ключевых слов. Я должен прочитать строки (ключевые слова) из файла и сделать из них типы. Я сделал немногооптимизация» положив дела в карту, но я надеялся, что тамбыло бы лучшим способом сделать это.

У меня есть следующее, например:

type Keyword = 
    | FOO
    | BAR
    | BAZ
    | BLAH

let mkKeywords (file: string) =
    use sr = new StreamReader(file)

    let caseMap = 
        FSharpType.GetUnionCases(typeof)
        |> Array.map (fun c -> (c.Name, FSharpValue.MakeUnion(c, [||]) :?> Keyword))
        |> Map.ofArray

    [
        while not sr.EndOfStream do
            let l = sr.ReadLine().Trim()

            match caseMap.TryFind l with
            | Some c -> yield c
            | None -> failwith 

Ответы на вопрос(3)

Ваш ответ на вопрос