scala> val a = Need(20)
a: scalaz.Name[Int] = [email protected]
scala> val b = Need(3)
b: scalaz.Name[Int] = [email protected]
scala> for(a0 <- a; b0 <- b) yield a0 + b0
res90: scalaz.Name[Int] = [email protected]
scala> (a |@| b)
res91: scalaz.ApplicativeBuilder[scalaz.Name,Int,Int] = scalaz.ApplicativeBuilde
[email protected]
scala> (a |@| b) { _ + _ }
<console>:19: error: ambiguous implicit values:
both method FunctorBindApply in class ApplyLow of type [Z[_]](implicit t: scala
z.Functor[Z], implicit b: scalaz.Bind[Z])scalaz.Apply[Z]
and value nameMonad in object Name of type => scalaz.Monad[scalaz.Name]
match expected type scalaz.Apply[scalaz.Name]
(a |@| b) { _ + _ }
^
Name
はMonad
であり、従ってApplicative
である。なぜこのコードは動作しませんか?それを動作させるには、どのような型の注釈を付ける必要がありますか?ありがとう!申請者として名前を使用するにはどうすればよいですか?
それを修正しました。ありがとう! – missingfaktor
暗黙的なスコープに頼っている場合、適切な暗黙の優先順位を与えるための合理的な解決策は見つかりませんでした。型クラスインスタンスを明示的にインポートすることは、時には唯一の方法です。この問題を避けるため、Scalaz7(http://code.google.com/p/scalaz/wiki/Scalaz7)の新しいデザインが試作されています。 – retronym