package scalaz.example
import scalaz._
import Digit._
object ExampleTraverse {
def main(args: Array[String]) = run
import Scalaz._
import collection.mutable.ArraySeq
def run {
List(some(7), some(9)).sequence assert_=== some(List(7, 9))
Stream(Some(7), None, Some(9)).sequence assert_=== none
val f = (_: String).map(_ - 48).toList
def g(s: String): FirstOption[Int] = {
val validation = s.parseInt
val option = validation.either.right.toOption
val fst = option.fst
fst
}
(List("abc", "def") ↦ g).value assert_=== none
(List("7", "8") ↦ g).value assert_=== some(List(7, 8))
(some("abc") ↦ g).value assert_=== none
(some("9") ↦ g).value assert_=== some(some(9))
List('1', '2', '3').traverseDigits assert_=== some(List(_1, _2, _3))
some('1').traverseDigits assert_=== some(some(_1))
ArraySeq('1', 'x', '3').traverseDigits assert_=== none
List(100, 200, 300).foldMapDefault(_.toString) assert_=== "100200300"
ArraySeq(100, 200, 300).foldMapDefault(x => x) assert_=== 600
(Stream(100, 200, 300).foldMapDefault(x => x ∏)).value assert_=== 6000000
(some(100).foldMapDefault(x => x ∏)).value assert_=== 100
(none[Long].foldMapDefault(x => x ∏)).value assert_=== 1L
List(100, 200, 300).collapse assert_=== 600
}
}