Shapeless文献中译.PDF

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Shapeless文献中译

Shapeless 文献中译 目錄 序言 0 Scala 中的函数式依赖 1 用 Shapeless 实现真正的多态函数 (之一) 2 用 Shapeless 实现真正的多态函数 (之二) 3 Aux 模式 4 Shapeless 与 Aux 5 術語表 2 Shapeless 文献中译 Shapeless 文献中译 Scalaz/Cats 和 Shapeless 是 Library Level Scala 开发者必备工具 。 序言 3 Shapeless 文献中译 Scala 中的函数式依赖 英版原文 函数式依赖是 Haskell 中 ( GHC 及其它一些地方)一个接近标准的扩展功能 。它 用来表达对 type class 的类型参数的约束 ,这个约束可以由编译器来强制保证 。程 序 员可以指明一个多参数的 type class 的某些参数完全由其它参数来确定 。这个功 能的特别常见的应用场景是要求一个函数的返回值类型由此函数的参数类型来确 定 。 那么它在 Scala 中有对应的表达方法吗?显然在 Scala 中存在相同的问题 —— 在 任何 (类型或方法)有多个类型参数的场合 ,我们都可能需要表达这多个类型参数 之间的类似于函数式依赖的约束关系 ,并让编译器来对这些依赖关系进行检验 。理 想的情况是这种约束还能够与类型推演相结合——我们可能希望编译器能够根据已 经推演出的类型来推演出由这们所确定的其它类型 。 事实上 ,Haskell风格的函数式依赖关系在Scala中可以有很简单的表达方式 ,但不 知为何这种表达方式并未被提到过 。相反——我曾经见过有人声称用 Scala 来表达 函数式依赖是不可能的 ,或者说虽然可能 ,但由于类型推演的问题而并不实用 。更 让人吃惊的是 Scala 的新集合库的重要功能 (CanBuildFrom)其实就是这种表达 方式的一个非常好的实际案例... 奇怪的是甚至在 Type Classes as Objects and Implicits(Olivera, Odersky and Moors, 2010)文献中也未曾被提及 。 可能人们早就注意到了 ,只是觉得太过平常而没有单独提出来的必要吧 。不管怎 样 ,我认为能够在两者之间建立联系是非常有用的 。下面我会用 Haskell wiki 上的 例子来做转换 。之后大家就会发现 CanBuildFrom 明显就是函数式依赖的实例 。 我们从 矩阵/向量/标量 相乘的例子开始 。这里我们想要表达“乘法结果的类型完全 由其参数的类型确定”这个事实 , Matrix * Matrix Matrix Matrix * Vector Vector Matrix * Int Matrix Int * Matrix Matrix Scala 中的函数式依赖 4 Shapeless 文献中译 这里 ,每一行有三个类型 ,前两个 (参数类型)确定第三个 (结果类型) 。我们将 这种关系直接表达成有三个类型参数的 trait ,然后用一些隐式定义来表

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档