now using Identity monad instead of IO