синтаксис на свързване в scalaz

Има ли начин да се използва хубав синтаксис на haskell-bind (>>) в scalaz, за да се напише кодът по този начин: monad1 >> monad2?

ToBindOps изисква да бъде предадена изрична монада, така че трябва да направя нещо като ToBindOps[F, Unit](monad1) >> monad2 в oder, за да получа достъп до >>, което вече е излишно, защото 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