scala – 这个功能可以用Haskell的类型系统来实现吗?

在Scala中,集合上的高阶操作总是返回上下文中最好的类型。例如,在BitSet的情况下,如果将int映射到int,您将获得一个BitSet,但是如果将int映射到字符串,则会得到一个常规Set。同样,如果您将Map映射到产生一对的函数,那么您将得到一个Map。否则你得到一个简单的迭代。 map的结果的静态类型和运行时间表示都取决于传递给它的函数的结果类型。

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,93).map(_ + "hola")
res4: scala.collection.immutable.Set[String] = Set(2hola,44hola,93hola)

在Haskell的类型系统中是否可以实现相同的功能?如果是,怎么样?上述代码片段中的例子的Haskell翻译将非常感谢。

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...