Функция "mayBeMempty" для полугруппы

Следующая функция -

mayBeMempty :: (Eq a, Semigroup a) => a -> a -> Bool
mayBeMempty candidate ref = candidate <> ref == ref

Является (менее эффективным) обобщением Data.Set.isSubSetOf, Он проверяет, содержится ли первый аргумент во втором, и всегда возвращает True когда первый аргумент mempty (когда он возвращается False как известно, не быть mempty).

Кто-нибудь знает, существует ли эта функция или концепция под каким-либо именем или даже с существующим классом типов (в этом случае это будет не менее эффективно, чем isSubSetOf)?

2 ответа

Решение

PartialOrd "s leq это то, что я искал.

IIUC, разница в том, что он не предназначен для соответствия правилам, как я описал для Semigroup, но вместо этого он предназначен для работы таким образом с Lattice который определен в том же пакете, который в некоторых отношениях похож на полугруппу, но лучше подходит для таких вещей, как наборы, в которых объединение чего-либо с самим собой приводит к самому себе.

Я искал с помощью Google и думаю, что нет предварительно реализованной версии этого.

Я действительно не понимаю, как это можно сделать более эффективным, ТБХ.

Другие вопросы по тегам