For reference JohanWiltink: " I think threading stdin and stdout through source is the correct way to do I/O anyway - can use a Monad for that"