окей, сделаем другое определение, "конкатенируемый" - тип T, элемент которого может быть объединен с другим элементом типа T, чтобы на выходе тоже иметь T, и есть нейтральный элемент типа T, который при объединении с другими отдаст тот же элемент
ну еще ассоциативность у объедниния
никакой науки. Набор функций можно представить на элме как
`type alias Monoid a = (a, a -> a -> a)
cmdMonoid :: Monoid (Cmd msg)
cmdMonoid = (Cmd.none, \a b -> Cmd.batch [a, b])`
для программирования это таки нужно, иначе зачем бы так форсили дизайн-паттерны в ооп? Абстракциям хочется давать какие-то имена (особенно таким частым как моноид), чтобы не называть определения каждый раз. Вместо того, что писать длинные предложения про Cmd.none и Cmd.batch можно сказать:
Cmd - моноид по Cmd.none и Cmd.batch
ну что у вас за фантазии коллега? моноид - категория, а не параметризироанный тип