It’s evidently useful to know that some arbitrary structure is a monoid, functor or anything else because it let’s you know what it is basically capable of (or rather, what it can’t do).
However, whenever I start using a library I look up what the central structure is an instance of I still need to look at the implementation of each to see exactly what mconcat, fmap or bind does. Is this always needed?
Good documentation preserves abstraction boundaries, conveys user-oriented expectations, and relieves you from the rabbit hole of following implementations.
Good documentation is unincentivized in programming, however. That’s why.