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/ がつながらない。というか、ネイメーヘン大学自体がつながらない。いったいどうなってるんだ?