F# 計算式を使用すると、モナド構文の複雑さを厚い構文糖衣層の背後に隠すことができます。Scalaで利用できる同様のものはありますか?
理解のためだと思います...
例:
val f = for {
a <- Future(10 / 2) // 10 / 2 = 5
b <- Future(a + 1) // 5 + 1 = 6
c <- Future(a - 1) // 5 - 1 = 4
} yield b * c // 6 * 4 = 24
val result = f.get
しかし、それは本当に正しくありません。より良い構文はありますか?
たとえば、haskell では次のようになります。
main = do fromHandle <- getAndOpenFile "コピー元: " ReadMode toHandle <- getAndOpenFile "コピー先: " WriteMode 内容 <- hGetContents fromHandle hPutStr toHandle コンテンツ hハンドルに近い putStr 「完了しました。」
これは、scala とは異なり、foreach ループのようには見えません。Scala 構文は、別個の概念であるリスト内包表記との結合が強すぎるようです。これにより、奇妙に見えない内部 DSL (モナド) を書くことができなくなります。