синтаксис привязки в scalaz

Есть ли способ использовать хороший синтаксис haskell-bind (>>) в scalaz, чтобы написать код таким образом: monad1 >> monad2?

ToBindOps требует явной передачи монады, поэтому мне нужно сделать что-то вроде ToBindOps[F, Unit](monad1) >> monad2, чтобы получить доступ к >>, что уже является излишеством, потому что monad1 >>= (_ => monad2) проще.

(В моем конкретном случае monad1 - это Free[A, B], поэтому у меня есть >>= "бесплатно", но необходимость привязки возникает довольно часто и для других монад)


person I See Voices    schedule 27.08.2015    source источник


Ответы (1)


Да, вы можете сделать это, импортировав объект scalaz.syntax.monad (или scalaz.syntax.bind). Это добавит неявный экземпляр BindOps в область видимости:

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

IO.putStrLn("Hello!") >> IO.putStrLn("How are you?")
person ZhekaKozlov    schedule 03.09.2015
comment
Спасибо, я нашел проблему. На самом деле это уже работало в моем случае, но IntelliJ обманул меня и выделил >> как ошибку (не удалось найти символ). Код компилируется и работает успешно, поэтому я обращусь к плагину Intellij scala. - person I See Voices; 03.09.2015
comment
@ISeeVoices Да, IntelliJ IDEA иногда плохо работает со Scalaz. - person ZhekaKozlov; 03.09.2015