Mar*_*ger 6 monads scala scala-collections
考虑以下函数链接f,g并h使用monadic for-ereherehension.
for {
x <- List ( 11, 22, 33, 44, 55 )
y <- f ( x )
z <- g ( y )
a <- h ( z )
} yield a
Run Code Online (Sandbox Code Playgroud)
如果f,g并且h都有签名:
Int => Option [ Int ]
Run Code Online (Sandbox Code Playgroud)
然后for-comprehension编译好.但是,如果我取代Option [ Int ]的
Try [ Int ],Scala的类型inferencer抱怨线路
y <- f ( x )
Run Code Online (Sandbox Code Playgroud)
以下错误消息.
error: type mismatch;
found : scala.util.Try[Int]
required: scala.collection.GenTraversableOnce[?]
y <- f ( x )
Run Code Online (Sandbox Code Playgroud)
为什么?两个Option [ _ ]和Try [ _ ]是(或应是)单子,并且如勾勒应顺利工作.
您只能在理解中使用相同类型的monad.在这种情况下,您的所有值都必须是GenTraversableOnce,因为第一个值是.它的工作原理与Option,因为从一个隐式转换Option到Seq,但是这是不可能的Try.
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |