FsYaml

F#用のYAMLライブラリです。

F#の型(レコードやリストなど)との親和性が高く、YAMLをF#で定義した型に直接マッピングできます。

特徴

FsYamlは、設定ファイルを手軽に読み込むという目的に特化しています。 そのため、パフォーマンスなどは優先順位としては低くなっています。 また、フルスペックのYAMLが扱えるわけではなく、あくまで設定ファイルに有用そうなものから実装しています。

簡単な例

例えば、以下のYAML文字列を考えます。

Name: bleis-tift
Languages: - 'F#'
           - 'C#'
           - Java
           - Scala

この文字列がstrという変数に入っているとして、それを読み込むために、例えば以下の型を定義します。

type t = { Name: string; Languages: string list }

そして、FsYamlを使用して以下のように読み込むことができます

let x = Yaml.load<t> str

たったこれだけで、xにはYAML文字列を読み込んだt型の値である、

{ Name = "bleis-tift"; Languages = [ "F#"; "C#"; "Java"; "Scala" ] }

が格納されます。

対応している型

以下の型の組み合わせに対応しています。

YAMLの!!nullの代わりに、'a optionに対応しています。 これにより、nullになりうる項目には'a optionを用います。 項目がnullの場合、Noneに、非nullの場合はその値がSomeに包まれた値になります。

レコードと判別共用体は、YAMLの!!mapの特別な形です。 !!mapをF#のMapにマッピングすることも可能ですが、キーが固定的なものとなる場合はレコードにマッピングした方が使いやすいでしょう。

!!mapを判別共用体にマッピングする場合、ケース識別子をキーに持つマップのマップとなる点に注意してください。 判別共用体へのマッピングは実験的な機能です。

配布ページ

ソースコード
github/bleis-tift/FsYaml

フィードバック

フィードバックは義務ではなく権利です。 なので、絶対にフィードバックしろ、とは言いません。 もしフィードバックしていただけるのであれば、どのような手段でも構いません。 例えば、

などなど、伝われば方法はなんだっていいです。が、対応するかどうかは分かりません。

更新履歴

1.0
公開

ライセンス

NYSLです。 自己責任のもとに自由に使い、改造、配布などなどを行ってください。


contact info: @bleis