I still don&#x27;t understand how one can express a concept such as monoid or group in, say, Haskell. One option is typeclasses, but they don&#x27;t actually let you express the laws..  Furthermore, sometimes the laws require more than one different objects, or objects which satisfy some other laws and so on recursively.<p>I can see how one can start from types, but I don&#x27;t see how one can start from abstract algebra (or categories or something). That is, possibly not to have fully specified objects that you work with.