refactored things to use MonadError, really cleaning up the type sigs, and introduced a MonadComputer type alias.