У меня есть монады, которые обертывают списки. Я хотел бы объединить эти монады, чтобы образовать монаду, которая объединяет все списки.
M[List[A]] + M[List[A]] ==> M[List[A]]
Для этого я сделал (псевдокод) :
(1 to 10).foldLeft(Option(List(0)))((accumulator, i) => {
for {
prev <- accumulator
more <- Option(List(i))
} yield prev ++ more
})
Это похоже на компиляцию, но мне кажется, что это должно быть проще и короче , чем эта. Есть идеи по улучшению?