Skip to content
This repository has been archived by the owner on Jan 25, 2018. It is now read-only.

Commit

Permalink
Indirection via map traverse
Browse files Browse the repository at this point in the history
  • Loading branch information
cjllanwarne committed Sep 1, 2017
1 parent 90e2d38 commit b228d6b
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/main/scala/lenthall/validation/ErrorOr.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,13 @@ object ErrorOr {
}

implicit class MapErrorOrRhs[A, B](val m: Map[A, ErrorOr[B]]) extends AnyVal {
private def elementToErrorOr(kvp: (A, ErrorOr[B])): ErrorOr[(A, B)] = kvp._2 map { v => (kvp._1, v) }
def sequence: ErrorOr[Map[A, B]] = m.traverseValues(identity)
}

implicit class MapTraversal[A, B](val m: Map[A, B]) extends AnyVal {

def sequence: ErrorOr[Map[A, B]] = m.toList.traverse[ErrorOr, (A, B)] { x => elementToErrorOr(x) } map { _.toMap }
def traverse[C,D](f: ((A,B)) => ErrorOr[(C,D)]): ErrorOr[Map[C,D]] = m.toList.traverse(f).map(_.toMap)
def traverseValues[C](f: B => ErrorOr[C]): ErrorOr[Map[A,C]] =
m.toList.traverse[ErrorOr, (A,C)] { case (a, b) => f(b).map(v => (a, v)) } map { _.toMap }
}
}

0 comments on commit b228d6b

Please sign in to comment.