scala/ScalaBook/chapter-09/src/main/scala/scalabook/path/Paths.scala
package scalabook.path
import java.io.File
object Paths {
val PathSep = File.pathSeparator
def fromEnv(varName: String) = System.getenv(varName) match {
case null => new Paths(Nil)
case paths => new Paths(paths.split(PathSep).toList.map(Path(_)))
}
def fromEnv(varName: Symbol): Paths = fromEnv(varName.name)
def fromPath(path: String) = new Paths(List(Path(path)))
def fromPath(path: Path) = new Paths(List(path))
}
final class Paths(val elements: List[Path]) {
def +(those: Paths) = new Paths(elements ::: those.elements)
def +(that: Path) = new Paths(elements ::: List(that))
def size = elements.size
def foreach(f: Path => Unit) = elements foreach f
def filter(f: Path => Boolean) = elements filter f
def map[U](f: Path => U) = elements map f
def flatMap[U](f: Path => Iterable[U]): List[U] = elements flatMap f
override def toString = elements.mkString(Paths.PathSep)
}