>>406みたいな変なことになるのは、reverseがRULESで書き換えられることを意図していないから
GHC HEADだと次のような警告がでる

rev-rules.hs:2:11: Warning:
Rule "rev/rev" may never fire because ‛reverse’ might inline first
Probable fix: add an INLINE[n] or NOINLINE[n] pragma on ‛reverse’

>たとえば先ほどの "rev/rev" の規則が記述されいても、次の式は書き換えられません。
>
>[ソースの記述] g xs = (reverse . reverse) xs

reverseに例えばNOINLINE[1]を指定すれば、この式も問題なく書き換えられるようになる
((.)をインライン化した後で規則に適合するようになるので)