2014-09-19 89 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

回答