加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:36:29 所属栏目:安全 来源:网络整理
导读:在Scala中,集合上的高阶操作总是返回上下文中最好的类型。例如,在BitSet的情况下,如果将int映射到int,您将获得一个BitSet,但是如果将int映射到字符串,则会得到一个常规Set。同样,如果您将Map映射到产生一对的函数,那么您将得到一个Map。否则你得到一
在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翻译将非常感谢。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读