Я использую для-понимания с неявной монадой скаляза, но когда я извлекаю кортеж данных, он выводит
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]