以下函数 -
mayBeMempty :: (Eq a, Semigroup a) => a -> a -> Bool
mayBeMempty candidate ref = candidate <> ref == ref
是Data.Set.isSubSetOf
的(效率较低)概括。它检查第一个参数是否"包含"在第二个参数中,并在第一个参数mempty
时始终返回True
(当它返回时False
已知它不mempty
)。
有谁知道这个函数或概念是否已经存在于某个名称甚至现有的类型类下(在这种情况下,它的效率不会低于isSubSetOf
)?
我已经用Hoogle搜索过,认为没有预先实现的版本。
我真的看不出如何提高效率,TBH。
PartialOrd
的leq
是我一直在寻找的。
IIUC,不同之处在于它的设计不是为了适应我为Semigroup
描述的规则,而是被设计为以这种方式与在同一包中定义的Lattice
一起工作,这在某些方面类似于半群,但更适合集合之类的东西,其中将某些东西与自身合并会导致自身。