Guest User

Untitled

a guest
Nov 25th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. import ch.srf.assetimporter.importer.Domain.Error
  2. import ch.srf.assetimporter.importer.tms.Interpreters.tmsThrowableToImporterError
  3. import ch.srg.tmsclient.EffDomain._envReader
  4. import ch.srg.tmsclient.TmsEffect.{TmsAlgebra, TmsErrorEither}
  5. import org.atnos.eff.addon.scalaz.concurrent.TaskEffect
  6. import org.atnos.eff.addon.scalaz.concurrent.TaskEffect._Task
  7. import org.atnos.eff.{Eff, Fx, Member}
  8.  
  9. import scalaz.\/
  10.  
  11. /*
  12. * Beispiel für Eff Komplexität:
  13. * ich will statt einem Ergebnis Eff[R,A] lieber ein
  14. * Ergebnis Eff[R, Error \/ A], wie gerade im Assetimporter mit runTms
  15. * implementiert:
  16. * statt runTms implemtiere ich runTmsErrorHandled:
  17. * */
  18. private def runTmsErrorHandled[R, A, U](p: Eff[R, A])(implicit m: Member.Aux[TmsAlgebra, R, U],
  19. task: _Task[U],
  20. env: _envReader[U]): Eff[U, Error \/ A] = {
  21. import ch.srg.tmsclient.TmsEffect.TmsEffectInterpreterSyntax
  22. import org.atnos.eff.syntax.addon.scalaz.eff._
  23. import org.atnos.eff.syntax.addon.scalaz.either._
  24. import org.atnos.eff.syntax.addon.scalaz.task._
  25. type S = Fx.prepend[TmsErrorEither, R]
  26. p
  27. .into[S]
  28. .runTms
  29. .taskAttempt
  30. .map(e => \/.fromEither(e).leftMap(tmsThrowableToImporterError))
  31. .runDisjunction
  32. .flatMap(_.fold(
  33. tmsError => TaskEffect.taskFailed[U, Error \/ A](new Exception(tmsError.toString)),
  34. _.pureEff
  35. ))
  36. }
  37.  
  38. /* Und das ist schon ein heftiger Aufwand für eine simple Transformation, oder*/
Add Comment
Please, Sign In to add comment