Linear Type

来週のゼミで、Wadler の、 Linear types can change the world! をやるらしいので、読んでみた。

線形型の値は、コピー無用、破壊的代入上等。
コピー無用とは、例えば、銀行口座への参照は必ずひとつだけと保証することで、SICPであったような、reader & writer 問題と無縁にする。
破壊的代入上等で、効率的、ガーベジコレクションが必要ない。
線形型を導入することで、破壊的代入と参照透明性とが住み分けできるようになる。
破壊的代入の世界を、Monadで閉じ込めるか、線形型で閉じ込めるかの違い。
線形型での閉じ込めは、型推論と相性が良さそう。

多分、こんな感じ。詳しくはゼミで聞こう。
Yet Another Haskell Tutorial の5章の、

  • main 関数は、RealWorld を渡されて起動して、
main rW =
  let rW’ = printAString rW "Please enter your name: "
      (rW’’,name) = readAString rW’
  in printAString rW’’
         ("Hello, " ++ name ++ ", how are you?")

SICPの bank account では、解決策として、Streamが扱われていた。Monadや、線形型は、その続きといえる。

線形型の発展形、一意型を使う、Cleanの公式サイト、 http://clean.cs.ru.nl/ がつながらない。というか、ネイメーヘン大学自体がつながらない。いったいどうなってるんだ?