Generic interfaces in Julia always confuses me. Julia has no (standardized) traits or interface semantics. Instead, there seems to be a tacit agreement on which methods must be implemented, optionally be implemented, and shouldn't be implemented by the user. Even worse, Julia packages that implement generic interfaces are often under-documented (AbstractDifferentiation.jl being no exception).