【问题标题】:"mayBeMempty" function for a Semigroup半群的“mayBeMempty”函数
【发布时间】:2018-12-25 18:46:35
【问题描述】:

以下函数-

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

Data.Set.isSubSetOf 的(效率较低的)泛化。它检查第一个参数是否“包含”在第二个参数中,并在第一个参数为 mempty 时始终返回 True(当它返回 False 时,已知它不是 mempty)。

有谁知道这个函数或概念是否已经以某个名称或什至现有的类型类存在(在这种情况下,它的效率不会低于isSubSetOf)?

【问题讨论】:

  • 我想知道你真正想要的是带有某种减法的半群,还是取消属性......那是一个不同的类,也许你可以编写一个更有趣的实现,例如也许它可能是列表中的isSubSequenxeOf 作为序列。
  • @assembly.jc:我正在寻找一个函数,它在为Set a 实例化时与isSubSetOf 执行相同的操作,并且通常总是执行与上面定义的mayBeMempty 等效的操作但有效(不​​一定使用&lt;&gt;==

标签: haskell typeclass monoids semigroup


【解决方案1】:

我用 Hoogle 搜索过,认为没有预实现的版本。

我真的不明白如何才能提高效率,TBH。

【讨论】:

  • 如果这个方法有一个类,效率会更高。那么Set a 的实例将是isSubSetOf
  • 在询问 SO 之前,我也使用 Hoogle 进行了搜索,但没有找到任何东西。在对此进行了更多思考并总结出“部分订单”这个术语之后,我现在在 Hackage 上找到了 stackage.org/haddock/lts-13.0/lattices-1.7.1.1/…partial-order
【解决方案2】:

PartialOrdleq 是我要找的。​​p>

IIUC,不同之处在于它的设计不符合我为Semigroup 描述的规则,而是设计为与Lattice 以这种方式工作,Lattice 在同一个包中定义,类似于在某些方面是一个半群,但更适合诸如集合之类的事物,其中将事物与自身合并会产生自身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2018-10-05
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多