моноидные законы
закон идентичности:
combine (identity, a) == combine (a, identity)
закон ассоциативности:
combine (a, combine (b, c)) == combine (combine (a, b), c)
Мы можем реализовать элемент идентификации (identity
) и двоичную операцию (combine
) для функций -
// identity element
const identity =
x => x
// binary operation
const combine = (a, b) =>
x => a (b (x))
// sample functions
const a =
x => x + 3
const b =
x => x - 1
const c =
x => x * x
// uphold laws
console.log
( combine (identity, a) (2) === combine (a, identity) (2)
, combine (a, combine (b, c)) (2) === combine (combine (a, b), c) (2)
)
// => true
// => true
Бинарная операция и элемент идентификации различаются в зависимости от вашего домена.См. Таблицу в Wikipedia для получения дополнительной информации о том, как реализовать элемент идентификации и двоичную операцию для различных наборов.
Конечно, вы не ограничены этими доменами.Ваш пользовательский тип может иметь различные двоичные операции и элементы идентичности, которые удовлетворяют законам моноидов.Если законы соблюдены, ваш тип относится к категории моноидов.