Implicit monads: tests with canonical structures and type classes