Skip to content

Instantly share code, notes, and snippets.

@pocketberserker
Last active August 29, 2015 14:13
Show Gist options
  • Select an option

  • Save pocketberserker/e652ed9929ecdc6fedf1 to your computer and use it in GitHub Desktop.

Select an option

Save pocketberserker/e652ed9929ecdc6fedf1 to your computer and use it in GitHub Desktop.
富山合同勉強会 http://toyama-eng.connpass.com/event/9372/ ジェネリクス談義用メモ

FSharp のジェネリック

出典

ジェネリックに関しては 3.0 と 3.1 で大きな違いはないはず

基本戦略

  • ランタイム側がフルサポート
  • 値型サポート
  • 型パラメータの書き方は 'T

変性 (variance)

"F# generic types do not support covariance or contravariance." (14.5.2 の Note)

制約

"5.2 Type Constraints" に制約の一覧がある。

  • comparison, equality, unmanaged
  • Member constraintsもある

型推論

静的に解決された型パラメータ

  • コンパイル時に実際の型に置き換えられる型パラメータ
  • Member constraint, inline キーワードと組み合わせることで、型クラスを一部エミュレーションできる

higher-kinded polymorphism

  • F# ではできない
  • F# もランタイムがサポートしてないことは原則やらない方針
  • highj とか higher 方式である程度エミュレーションできるが、実装できないものもある

抽象化との相性

TBD

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment