多元素数据结构,如Streams和Lists,似乎有一些不同的属性.例如,
它们是Monoids
Semigroup实现合并元素,而不知道元素类型)单元素数据结构也是Monoids,但如果不知道它们包含的type (例如Option、Future等),就不能有半组实现。它们也不能保证元素在添加/合并后仍然“存在”。
这种类型的数据结构是否有包含已添加(合并)的所有元素的名称?我的目标是为这些类型的数据结构创建一个独特的类型类,以便将它们与其他Monoids/半群区分开来。
发布于 2020-06-08 09:21:46
从技术上讲,你要求的是一个单一的基座。如果您希望能够将A和A组合成另一个A,那么有一些空A的想法不会改变结果,而且操作是关联的--那么不管是哪种情况,这都是单样的:
A是一些普通的类型,您可以将其合并为numbersA是一些F[B],其中单线属性属于F,对于所有可能的B都是正确的。
出于实际原因,猫中有两个类型的类:
Monoid[A],它为您提供了combine(a1: A, a2: A): A、empty: A以及您可以使用这些twoMonoidK[F[_]],(基本上是工厂)实现的所有功能:[A] => Monoid[F[A]],但是有了允许您延迟A应用的实用程序,例如combineK[A](fa1: F[A], fa2: F[A]): F[A]、emptyK[A]: F[A]半群也是如此,这里有Semigroup,SemigroupK,还有Semigrupal,它是关于类型的半群( A和B的加法,意味着元组(A, B)的创建,(A + B) + C = A + (B + C),如果我们假设相等直到同构)。这表明我们不需要发明新的代数,旧的代数工作得很好,尽管有时不同的用例可能需要稍微不同的实现。
https://stackoverflow.com/questions/62243417
复制相似问题