Scala: структура коллекции / предмета - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать шаблон проектирования с trait или class:

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

   def combineWith(other: A): Collection
}

С F, являющимся Set, List, Seq и т. Д. ...

И 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 и случаи, когда вы хотите иметь дело с телом в целом.

Как лучше всего это представить?

Редактировать:

Разве этот паттерн не является Монадой или одним из этих Функторов и т. Д....?

Если я сделаю что-то вроде:

 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

нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...