微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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翻译将非常感谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐