"Theorems for free!"とParametricityとJVMとCLRのジェネリクスの実装の違いの関係

という題だけ思いついて、中身を書ける気がしないので、誰か書いて欲しい(他力本願)


だいぶ自信がないのですが

  • "Theorems for free!"で言っている、Parametricityについて、超大雑把に自分の今の時点の理解を言葉にしてみると「型パラメータによって関数の性質が変わらない*1」ということ(?)
  • CLR*2ジェネリクスで型パラメータが保存されると、その性質を破ることが容易になる(?)ので、そういう論拠で「JVMがtype erasureなのは正しい」などと関数型なScalaの人達がたまに主張している(?)

という話にもっていけるのでは?と思ったのですが、これ以上なにか書くほどの知識を持ち合わせていないので

  • そもそもParametricityの理解から違ってそうだよ
  • だいたい話の方向性合ってるよ
  • JVMCLRとParametricityの関係について、実はすでに書いてあるものがあるから読むといいよ
  • そんなの関係ないし全然違うよ

などの意見を募集しています

*1:もしくは、変えてはいけない、変えることが不可能

*2:C#とかF#が動く .NETの環境のやつのことです