Scala:集合/项目的模式

时间:2018-12-18 02:06:41

标签: scala functional-programming

我正在尝试使用traitclass的设计模式:

class Collection(input: F[A]) { 
   def combineWith(other: Collection): Collection

   def combineWith(other: A): Collection
}

FSetListSeq等...

并且A的类型为Item

class Item(....) {
   def wrap: Collection[Item]
}

我尝试过,但是我陷入了一个循环,该循环中的项目需要集合的类型,而集合需要项目的类型,所以它变得无法控制哈哈。

我确定必须有一种模式可以重用,但我找不到它。

我开始使用ScalaZ,所以如果有可以使用的功能,那就太好了。

最终目标是要有一对Item <-> Collection,其中该集合只能接受正确类型的项目,而该项目只能在此集合中。并能够与wrap来回移动并能够添加收藏集:

  • Item +: Collection
  • Item |+| Item
  • Collection :+ Item
  • Collection ++ Collection

所有这些操作都应返回Collection。我的项目中有几个,我不想在各处复制粘贴相同的代码。

编辑:示例:

想象case class Human(body: Body)class Body(limbs: List[Limbs])

您可以使用body的方法来迭代limbs和要处理整体的情况。

代表它的最好方法是什么?

修改:

此模式不是Monad还是其中的Functor等之一?

如果我做类似的事情:

 class MyCollection(item: Item*) {
     def map(f: Item => Item): MyCollection

     def flatMap(f: Item => MyCollection): MyCollection

     def filter(p: Item => Boolean): MyCollection
 }

行得通吗?

类似https://scastie.scala-lang.org/xn304lefRbO7vjwhopgE8g

不?

0 个答案:

没有答案