Как распаковать (неявное) скалаз Monad в для понимания? - PullRequest
0 голосов
/ 25 сентября 2018

Я использую для-понимания с неявной монадой скаляза, но когда я извлекаю кортеж данных, он выводит

value filter is not a member of type parameter M[...]

Код выглядит так:

implicit val monad: Monad[M] = ...
for{
  (a,b) <- getABMonad() // error: value filter is not ...
} yield a + b

, где getABMonad(): M[(Int, Int)].M - это аргумент типа, который может состоять из нескольких вещей, таких как Identity, EitherT или другие стандартные монады.Я получаю его, используя implicitly[Monad[WhatEverMonadImUsing]], поэтому я не реализую себя как монаду API.

Из того, что я понял , для понимания используйте API filter для обнуления данных.Так что, кажется, scala.Monad не предоставляет его.Я могу решить эту проблему, написав:

implicit val monad: Monad[M] = ...
for{
  aAndB <- getABMonad()
  (a, b) = aAndB
} yield a + b

Есть ли практический способ избежать этой неправильной строки?

[scalaz 2.10-7.0.2]

...