過去に遡って、Reason ML Advent Calendar の2日目を書く。
初めのほうなので、参考になる資料をリストアップする。
Awesome ReasonML
各プラットフォームにあるAwesome XXXのReason版。主要なサイトへのリンクやサンプルアプリケーションへのリンクがある。
発表資料へのリンクもあって参考になる。特にDawn of ReasonがReasonのモチベーションが簡潔にまとまっていてよかった。 が初期の資料らしく、紹介されているプロジェクトの一部はすでにdeprecatedになっていたりする。
reasonml-community
各ライブラリのBuckleScriptのバインディングがまとめられている。 axiosやreactといったよく使うライブラリのバンディングが紹介されている。
reasonml-communityという名前なのに、Reasonの紹介がやたら雑でウケる。
昔はBuckleTypesという謎の名前だったが、リネームされてだいぶ分かりやすくなった。
BuckleScript User Manual
OCaml(BuckleScript)とJavaScriptのセマンティクスの差を埋めるために、アノテーションが用いられる。例えば、OCamlに存在しないプロパティアクセスを示すためには @@bs.get
アノテーションが用る。
type textarea;
external get_name : textarea -> string = "name" [@@bs.get];
これらのアノテーションはBuckleScript User Manualに記載がある。 ただしBuckleScriptの文法なのでReasonへの変換は勘でやる必要がある。
BuckleScript API Manual
Reason/BuckleScriptで利用できるAPIについての解説がある。 基本的にJavaScript組込みの型へのバインディングとなっている。
OCamlでよく使われるodocで生成されている。OCamlに慣れている人はすんなり読めるが、そうでない人は違和感を覚えるかもしれない。 基本的に型しか書いてないので、慣れが必要。
Js.NullやJs.Undefinedがnull
やundefined
に対する操作を提供していておもしろい。モナドになっている。
ReasonML Discord
Discord。 活発で質問すると答えてくれる。
まとめ
- awesome reasonの資料で雰囲気を掴む
- JSとのインタフェースはBuckleScript API Manualを読みながら書いていく。
- JSライブラリのバインディングを書くときはBuckleScript User Manualを読みながら、アノテーションをつけていく。
- つらくなったらDiscordで聞く
という流れで書くのがいいと思う。