型を返す関数を用意しようとしています。 F#でを符号化する方法がありますか?は新しい識別された共用体型を作成し、その識別された共用体を関数から戻しますか?F#:1つの関数から異なる型の値を返す
type Json = JNumber of float
| JString of string
| JArray of seq<Json>
| JObject of Map<string, Json>
| JBool of bool
| JNull
let parseJson(jason:Json) = match jason with
|JNumber num -> num
|JString str -> str
|JArray arr -> arr |> Seq.map (fun e -> parseJson e)
|JObject obj -> obj |> Seq.map (fun (k,v) -> (k, parseJson v)) |> Map.ofArray
|JBool boo -> boo
|JNull -> None
を基本的に私はFの#のデータ構造にJSONオブジェクトを回すことができるようにしたい:ここ
はコンパイルされません簡単な例です。 (いくつかの背景のために、私は別のステップでテキスト→Jsonオブジェクト→F#データ構造を変換するおもちゃjsonパーサーを書いています)
これは時代の全体の束を尋ねてきたし、それは本当に不可能です。単純な理由は '' x = parseJson what any'''''と '' x'''の型がコンパイルされていればどうでしょうか? –
@JohnPalmerこれは、タイププロバイダが何であるのでしょうか?私の考えは、質問は正しいとは限りませんが、答えは "タイププロバイダ"を作成することです... gnicholasの場合:https://msdn.microsoft.com/en-us/library/hh361034.aspxまたはこれをチェックしてください: http://fsharp.github.io/FSharp.Data/library/JsonProvider.html、おそらくhttps://github.com/fsharp/FSharp.Data/tree/master/src/Jsonのソース –
@HelgeReneUrholm型プロバイダは実際に複雑な型を返すことに注意してください。コンパイル時に型を生成できるように、実際にはテンプレートファイルが必要です。実行時に新しいファイルを使用する場合は、テンプレート –