It seems that with Ryan's approach, DList is not needed, simple concat works fine.

It also seems to run in constant space. Now I must do the exercise of rewriting it to see why concat works, since >>= is infixl and ++ is infixr, this seems odd :) But again, my mind might be thinking too strict (bad imperative habits?)

http://hpaste.org/fastcgi/hpaste.fcgi/view?id=8316#a8357