forall の指定がどのような場合に必要なのか、未だによく分かりません。
役割や使い所などが詳しく書かれたWebページはありますか。
英語でも構いません。

ちなみに「本物のプログラマはHaskellを使う」の説明は難しくて理解出来ませんでした。
http://itpro.nikkeibp.co.jp/article/COLUMN/20080603/305833/?P=2

型の一番外側や内側という表現がまず分かりません。
例えば f :: a -> b -> c という関数の場合、a は外側でしょうか、c は内側でしょうか。
また、applyTupleのfにおける多相性がapplyTuple自身に成り立つという表現も分かりませんでした。

分からない部分はとりあえず無視して読み進めましたが、分からない部分が次々と増えていくだけでした。