Slide 1

Slide 1 text

Introducing Type Providers 2020/04/17 (金) 型システム祭りオンライン @e_ntyo

Slide 2

Slide 2 text

話している人について ● @e_ntyoといいます ● Webアプリケーション開発者 ● 主にTypeScriptを書いている ● F# Newbie

Slide 3

Slide 3 text

今日話すこと 1. Type Providers とはどのような機能か 2. Type Providers を使うと何が嬉しいのか 3. まとめ

Slide 4

Slide 4 text

Type Providers とはどのような機能か ● MSのF#というプログラミング言語の機能 (3.0~)[1] ● 明確なスキーマが提供されていないReal-World dataについて、 いくつかのサンプルから静的に型を推論する仕組み[2]

Slide 5

Slide 5 text

Type Providers とはどのような機能か - JsonProviderの例 ● には文字列 ● には数値か文字列 ● はオプショナル

Slide 6

Slide 6 text

Type Providers とはどのような機能か - JsonProviderの例

Slide 7

Slide 7 text

Type Providers とはどのような機能か - JsonProviderの例

Slide 8

Slide 8 text

Type Providers とはどのような機能か - JsonProviderの例

Slide 9

Slide 9 text

Type Providers とはどのような機能か ● データソースはリモートにあってもよい ● JSON以外にも、様々な構造のデータに対応[4] ○ JSON, XML, CSV, HTML, SQL, Entity Framework, OData, WSDL, etc. ○ 必要であれば自作することも可能[5](らしい)

Slide 10

Slide 10 text

Type Providers を使うと何が嬉しいのか ● 実データドリブンで型が決まる→信頼性の向上 ○ 一般に、プログラムからアクセスしようとする外部のデータには型定義がない ■ “API仕様書”に書いてあったりする ● JSON Schema[3]が登場、将来的には変わってくる? ■ 仕様と異なる値が入っていることも ● 補完が効くため、未知のデータをシュッと解析したいときに役立つ ○ 「このcsvファイルの内容をいい感じに集計したグラフを作っておいてください」

Slide 11

Slide 11 text

まとめ - 今日話したこと ● F#というプログラミング言語には、Type Providersという便利機能があ る ● Type Providersは、JSONとかRDBのデータから静的に型定義を推測 ○ 「APIドキュメントが更新されていなかった!」みたいな罠にはまらない

Slide 12

Slide 12 text

まとめ - 今日話さなかったこと ● SRTPや測定単位の推論など、F#の型システムについてのその他のトピッ ク ● Type Providersはどう実装されているのか ○ 元論文[2]を確認してください ● Type Providersはどういった経緯で提案されたのか ○ F#の言語デザイナであるDon氏によるF#の歴史についての記事[1]を確認してください ○ 10万字近い大作ですが、猪股健太郎氏による日本語訳[6]もあります

Slide 13

Slide 13 text

参考文献 ● [1] Don, Syme.; The Early History of F#: The Early History of the F# Language, camera ready. ACM Program. Lang. 2020, HOPL, Article 75(4), p.75-132. https://doi.org/10.1145/3386325. ● [2] Petricek, Tomas.; Guerra, Gustavo.; Syme, Don. Types from data: Making structured data first-class citizens in F#. PLDI '16: Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation, 2016/05/10, p.477-490. https://doi.org/10.1145/2908080.2908115 ● [3] JSON Schema. http://json-schema.org/, (accessed 2020-04-13).

Slide 14

Slide 14 text

参考文献 ● [4] Cartermp. “Type Providers - F#.” F# | Microsoft Docs. https://docs.microsoft.com/en-us/dotnet/fsharp/tutorials/type-providers/, (accessed 2020-04-13). ● [5] Cartermp. “Tutorial: Create a Type Provider - F#.” F# | Microsoft Docs. https://docs.microsoft.com/en-us/dotnet/fsharp/tutorials/type-providers/creating-a- type-provider, (accessed 2020-04-13). ● [6] DON SYME. 猪股健太郎訳. "The Early History of the F# Language". matarillo.com. 2019-09-10. https://matarillo.com/general/hopl-fsharp.md, (accessed 2020-4-14).