2015-08-27 41 views
1

有没有一种方法可以在scalaz中使用nice的haskell-bind(>>)语法来编写代码:monad1 >> monad2在scalaz中绑定语法

ToBindOps需要传递明确的单子,所以我必须做一些像 ToBindOps[F, Unit](monad1) >> monad2 在奥德以访问>>,这已经是矫枉过正,因为 是monad1 >>= (_ => monad2)简单。

(在我的具体情况monad1是Free[A, B],所以我有一个>>=“免费”,但需要结合其他的单子经常弹出以及)

回答

2

是的,你可以通过导入做到这一点一个对象scalaz.syntax.monad(或scalaz.syntax.bind)。这将带来一个隐含的实例BindOps的范围:

import scalaz.effect.IO 
import scalaz.syntax.monad._ 

IO.putStrLn("Hello!") >> IO.putStrLn("How are you?") 
+1

谢谢,我发现了这个问题。其实它已经在我的情况下工作,但IntelliJ欺骗了我,并强调'>>'是一个错误(找不到符号)。代码编译并运行成功,所以我会将其解释为Intellij scala插件。 –

+0

@ISeeVoices是的,IntelliJ IDEA有时不适合Scalaz。 – ZhekaKozlov