|
In Scala 2.7 the signature for map, defined in Iterable[+A], was
def map[B](f : (A) => B) : Iterable[B] That seems fairly close to the Haskell signature, although somewhat less readable. However, in Scala 2.8, things got more complicated with the addition of the implicit. Consider two functions that I might apply to a collection of integers: Set(1,2,3,4).map{ _2 }
// Set[Int] = Set(2, 4, 6, 8) Set(1,2,3,4).map{ _.toString }
// Set[String] = Set(1, 2, 3, 4) Nothing surprising here, we provide a method A->B and use it to map from Set[A] -> Set[B]
Now lets use the optimized BitSet collection, which efficiently stores integers: BitSet(1,2,3,4).map{ _2 }
// BitSet = BitSet(2, 4, 6, 8) BitSet(1,2,3,4).map{ _.toString }
// Set[String] = Set(2, 4, 3, 1) Notice that the collection type is BitSet for the function with return type of Int, but plain Set for the function with return type of String. This functionality is brought to you through the implicit parameter. |