refactor with individual roll representations, use writer monad for output