それと

> 時間O(1)のtailを実装するには結局seekするしかないんだよ

分かっている
だから私はtailの時間O(1)の実装には一言も触れていない

>>345 では、わざわざ泥臭いことをやってはいけないという空気になりがちな
私なりの理由を述べた(tailの実装といった具体的な対象ではなく一般論)

やってはいけないとは言いすぎだと思うが、アプリの設計開始時から、
または Haskell によるプログラム開始時から
泥臭いことをやってはいけないというくらいの考えでプログラムした方がいいと思う
少なくとも Haskell では

泥臭い事を考えるのは、そうしなければ目標を達成する術が残っていない場合だけ
本当に最後の最後に考える最終手段くらいのもの

本来はもっと抽象度を高める方向に意識を向けた方が良いと思う
例えば seek で1バイトずつ取得したものを文字と解釈して計算するよりも、
getContentsに任せて「ファイルの内容を計算対象にする」方が抽象度は高い

蛇足かも知れんが、ついでに言えば入門書も抽象度を高める考え方や方法を伝授すべきだと思う