Trong Scala, các hoạt động đặt hàng cao hơn trên các bộ sưu tập luôn trả về loại tốt nhất có thể trong ngữ cảnh. Ví dụ: trong trường hợp BitSet
, nếu bạn ánh xạ ints thành ints bạn nhận được BitSet
, nhưng nếu bạn ánh xạ ints thành chuỗi, bạn sẽ nhận được một số chung Set
. Tương tự, nếu bạn map
a Map
với chức năng mang lại một cặp thì bạn sẽ nhận được số Map
đổi lại. Khác bạn nhận được một đơn giản Iterable
. Cả loại tĩnh và biểu diễn thời gian chạy của kết quả của bản đồ phụ thuộc vào loại kết quả của hàm được truyền cho nó.Chức năng này có thể được triển khai với hệ thống kiểu của Haskell không?
scala> Map(2 -> 'a', 6 -> 'b') map { case (k, v) => (k + 1, v.toString) }
res0: scala.collection.immutable.Map[Int,java.lang.String] = Map(3 -> a, 7 -> b)
scala> Map(2 -> 'a', 6 -> 'b') map { _._1 }
res1: scala.collection.immutable.Iterable[Int] = List(2, 6)
scala> import collection.immutable.BitSet
import collection.immutable.BitSet
scala> BitSet(2, 44, 93).map(1 +)
res3: scala.collection.immutable.BitSet = BitSet(3, 45, 94)
scala> BitSet(2, 44, 93).map(_ + "hola")
res4: scala.collection.immutable.Set[String] = Set(2hola, 44hola, 93hola)
Có thể triển khai cùng chức năng trong hệ thống kiểu của Haskell không? Nếu có, làm thế nào? Một bản dịch Haskell của các ví dụ trong đoạn mã trên sẽ được nhiều đánh giá cao. :-)