A Default Identity Value for Programming 13 years ago
J has a similar feature: when applied to an empty array, /+ returns 0 and /* returns 1.
J doesn't have user-defined types. In a language with user-defined types, you would probably have to declare which operations are monoids.