parameterized typeclasses over a monad m
made WriteVar a superclass of EditVar