I might have misunderstood you, but what about using the existing interact function: http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Prelude.html#v:interact
And for your interact, since it is not in the IO monad, you cannot write such a function. [ don't tell him about the unsafePerformIO :) ]