目录

  1. 前言
  2. Shapeless简介
  3. The Type Astronaut's Guide to Shapeless简介
  4. 总结

一、前言

       在我的2016,感恩、乐观、努力一文中,说2017年要进行技术储备,开始写第一本书或者翻译第一本书,当时未免是夸下海口,但是很快机会就来了,在学scala基础的过程中碰到了shapeless框架,恰好其有一本英文官方指导,链接地址为The Type Astronaut's Guide to Shapeless,很薄的一本书,100多页,于是就想能不能将其翻译下来,权当练手,贻笑大方。本文主要是对shapeless以及该书做简单介绍,相当于序,具体翻译内容大概要到鸡年了。

二、Shapeless简介

       shapeless是一款开源的scala类型处理框架,其Github地址为https://github.com/milessabin/shapeless,简介如下:

shapeless is a type class and dependent type based generic programming library for Scala. It had its origins in several talks by Miles Sabin (@milessabin), given over the course of 2011, on implementing scrap your boilerplate and higher rank polymorphism in Scala. Since then it has evolved from being a resolutely experimental project into library which, while still testing the limits of what's possible in Scala, is being used widely in production systems wherever there are arities to be abstracted over and boilerplate to be scrapped.

       所以shapeless是用来在scala中进行type class处理和dependent type处理的框架。关于type class可以参考http://hongjiang.info/scala-type-classes-pattern/、dependent type可以参考http://hongjiang.info/scala-type-system-dependent-types/

       个人理解type class就是高阶的隐式参数,相当于对类型进行分类,常用的有Ordering
Numeric、Manifest、TypeTag、ClassTag等,可以翻译为分类类型。dependent type指当type class中存在多个类型参数的时候,某一个类型参数可以由其他类型参数决定,可以翻译为依赖类型。

三、The Type Astronaut's Guide to Shapeless简介

       这本书是其官方指南,有没有中文版也不太清楚,借用一句话就是少一些功利主义,多一些不为什么的坚持。所以我仅仅就是想把他翻译下来,一是提高英语水平,二是更好的理解它。So,just do it!下面是我对该书1.2节About this book翻译。

1.2 关于该书

       该书共分为两部分。

       第一部分介绍分类类型推导,这允许我们用一些泛型规则来为代数数据类型(个人理解就是scala中的模式类)创建分类类型实例,第一部分由四章组成。

  • 第二章介绍泛型展示,以及shapeless中的Generic这个分类类型,Generic分类类型能够为任何一个case类或者sealed修饰的特质创建一个泛型解码器。

  • 第三章用Generic提取自定义分类类型实例,并创建一个样例分类类型用于解码scala中CSV格式数据,但是这个技术可以扩展到许多情形,此外还介绍了用于处理递归数据的Lazy类型,可以处理像lists以及trees等。

  • 第四章介绍前几章需要的理论和编程模式,特别是针对依赖类型、类型依赖函数以及类型级别编程,这些能使我们进入更高级的shapeless应用。

  • 第五章介绍LabelledGeneric,是Generic的一个变体,它揭露了字段和类型名称作为泛型展示一部分。还介绍了一些附加理论:字面类型、单例类型、幽灵类型和类型标签。用创建一个在输出中保持字段名称以及类型名称不变的JSON解码器的方式来论证LabelledGeneric。

       第二部分介绍在shapeless.ops包中提供的“ops分类类型”。Ops分类类型来源于一个操作泛型展示工具的扩展库。此外本部分在接下来的三章中提供一个入门理论而不是探讨每一个op的细节。

  • 第六章讨论ops分类类型的通用布局并提供一个将几个简单ops串联到一起组成一个强大的“模式类迁移”工具的例子。

  • 第七章介绍多态函数并展示如何在ops分类类型中关于泛型展示的mapping、flat mapping以及folding操作中使用多态函数。

  • 第八章介绍shapeless用于在类型级别展示原始数字的Nat类型。介绍几个相关的ops分类类型并用Nat主观的建立我们自己的scala检查版本。

四、总结

       不出意外,这应该是猴年的最后一篇博客,这篇文章说大一点,也为鸡年的奋斗开了一个头,希望接下来的人生能够扎扎实实静下心来干点事情、学点东西。当然水平有限,并且还没有深入研究该书,很多问题和知识点自己还理解的不够,所以难免会出现错误,欢迎批评指正!同时在这里感谢我的合伙人包亮——西北第一程序员——对我的翻译以及编码的精心校对和指导!在这里也预祝所有的人新年快乐,新的一年里能够心想事成,取得令自己满意的收获!

shapeless官方指南翻译写在前面的更多相关文章

  1. shapeless官方指南翻译总结

    今天抽空把之前翻译的<The Type Astronaut's Guide to Shapeless>一书放到了Gitbook上,将其开源供所有人阅读并希望大家能够提出宝贵意见,地址为sh ...

  2. [翻译]写给精明Java开发者的测试技巧

    我们都会为我们的代码编写测试,不是吗?毫无疑问,我知道这个问题的答案可能会从 “当然,但你知道怎样才能避免写测试吗?” 到 “必须的!我爱测试”都有.接下来我会给你几个小建议,它们可以让你编写测试变得 ...

  3. yii Query Builder (yii 查询构造器) 官方指南翻译

    /**** Query Builder translated by php攻城师 http://blog.csdn.net/phpgcs Preparing Query Builder 准备 Quer ...

  4. mongodb学习(翻译1)

    学习mongodb,试着翻译写,英语能力有限,希望大家指正,不顺畅地方大家担待,会后续翻译后面内容: 开始认识C#驱动(官方) 简介 本介绍提供了足够的信息,让你开始使用C#的驱动程序.起步之后,你可 ...

  5. HTML5之appcache语法理解/HTML5应用程序缓存/manifest缓存文件官方用法翻译

    习惯性的贴几个参考链接: W3School-HTML 5 应用程序缓存 官方 MDN window.applicationCache 接口文档 官方 MDN 用法示例 看所有的教程不如直接看最原始的官 ...

  6. angular2 学习笔记 ( translate, i18n 翻译 )

    更新 : 2017-06-17 <h1 i18n="site header|An introduction header for this sample">Hello ...

  7. 自己写一个chrome扩展程序 - 右键菜单扩展

    最近在学习Spring,心想dotnet如何实现类似形式呢.于是想认真学习Casetle组件,发现没有书籍!而spring的书多得很.于是只好找网上教程了.发现系统的文章不多.Terrylee好多文章 ...

  8. (转)mongodb学习(翻译1)

    原文地址:http://www.cnblogs.com/Johnzhang/archive/2013/09/10/3313582.html 学习mongodb,试着翻译写,英语能力有限,希望大家指正, ...

  9. Deep Learning论文翻译(Nature Deep Review)

    原论文出处:https://www.nature.com/articles/nature14539 by Yann LeCun, Yoshua Bengio & Geoffrey Hinton ...

随机推荐

  1. Java 之JavaBean 、EJB 和POJO

    由于是创业公司,开发人员较少,所以公司临时决定让几个C的程序猿临时客串Java.所以避免不了有很多基础问题,今天就有两个人都问我,JavaBean和POJO的区别,我可按照自己的理解给他们大致说了下, ...

  2. 使用jQuery热门功能实现

    非常多站点上都有返回顶部的效果,本文阐述怎样使用jquery实现返回顶部button. 首先须要在顶部加入例如以下html元素: <p id="back-to-top"> ...

  3. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...

  4. GridView动态增加行

    GridView动态增加行GridView动态增加行 很多时候,我们需要可编辑的表格,来比较方便的进行数据的录入,比如学习成绩的录入.当然这就要求能够动态的增加行,来一次性录入多个学生的信息.现在用A ...

  5. Jetbrains 系列神器

    PRODUCTS IntelliJ IDEA ReSharper WebStorm PhpStorm PyCharm RubyMine AppCode YouTrack TeamCity dotTra ...

  6. Carmichael Numbers - PC110702

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10006.html 原创:Carm ...

  7. Forms Authentication in ASP.NET MVC 4

    原文:Forms Authentication in ASP.NET MVC 4 Contents: Introduction Implement a custom membership provid ...

  8. OpenStack调研

    OpenStack调研:OpenStack是什么.版本演变.组件关系(Havana).同类产品及个人感想 一点调研资料,比较浅,只是觉得部分内容比较有用,记在这里: 首先,关于云计算,要理解什么是SA ...

  9. defer 与 async

    defer HTML4.01定义的 只适用于外部脚本(IE4~7会支持内嵌脚本的defer属性) 告诉浏览器立即下载,延迟执行,脚本会延迟到整个页面全部解析完毕之后才运行 HTML5规范要求脚本按照他 ...

  10. JS OffsetParent属性

       offsetParent 属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素. 如果这个容器元素未进行CS ...