hoge (x:xs) = fuga x : hoge xs
は、
データ構造の実装を直接触る、汚い・忌むべきコードなんだよ!
hoge xs = cons (fuga.head xs) $ hoge.tail xs
みたいにちゃんと関数で書くべきなんだ!!

もちろん、
bar Just a  = foo a
bar Nothing = baz
もダメダメだ!!!