я кста пока не видел кода читаемее и чище тфа нигде, ни в сисярпах, ни в ИО-скале, ни у питонистов
govnoservice[F[_]: Monad](repo: GovnoRepo) {
def doGovno(id: Int) =
for {
maybeGovno <- repo.daiGovna(id)
_ <- transformGovno
} yield {
if (maybeGovno.get == null) throw new Exception("monad laws are broken")
else Either.right("yra, rabotaet!")
}
}