そんなDQN本だったっけと思って自分も見返してみた

p.50より引用
> tailコマンドの作りかたにもいろいろありますが、今回は次のような方針で実装しました。
> 1. 行のリストを逆順にする
> 2. 先頭からn行を取る
> 3. 取った部分リストをまた逆順にする

実際のコード、同ページのリスト2.9
> main = do cs <- getContents
> putStr $ lastNLines 10 cs
> lastNLines n cs = unlines $ takeLast n $ lines cs
> takeLast n ss = reverse $ take n $ reverse ss

ここまでに使った関数は putsStr, putStrLn, print, length, take, reverse, lines, unlines
アクションが getContents

入門書の序盤のリスト処理の例題としてはこんなもんじゃないだろうかと思う
ふつける擁護とかしても仕方ないので俺ならこう実装するってのがあれば見てみたい