liberalised reimplementation of cpp in Haskell
