multi-module, use monad transformers