2014-09-19 46 views
1

假设结合习惯的方法,我们有包裹在不同的单子两个值(例如尝试和Option):用不同的单子在斯卡拉

val x: Option[Int] = Some(10) 
val y: Try[Int] = Success(4) 

,我们希望有值的总和。一会写

val z = for { 
    xval <- x 
    yval <- y 
} yield xval + yval 

但它不会被编译,因为类型错误。有没有一种惯用的斯卡拉方式来解决这个问题?

+6

[单子一般不是可组合/组合(http://tonymorris.github.io/blog/posts/monads-do-not-compose /),但是用试试你可以使用.toOption – 2014-09-19 19:59:34

+0

你不会真的在Haskell中合并monad,你只需要将它们堆叠起来,创建更深更深的嵌套 – 2014-09-19 20:00:16

+2

Monads不可组合,寻找Monad变形金刚, 'TryT [Option,A]' – 4lex1v 2014-09-19 20:01:49

回答