专栏首页点滴积累shapeless官方指南翻译写在前面

shapeless官方指南翻译写在前面

目录

  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 关于该书

该书共分为两部分。

第一部分介绍类型类(type class)派生,它使我们仅用一些泛型规则来为任何代数数据类型(algebraic data type,简称ADT)创建类型类实例。第一部分包含四个章节。

  • 第二章介绍泛型表示(generic representation),以及shapeless中名为Generic的类型类,Generic能够为任何一个模式类(case class)或密封特质(sealed trait)创建一个泛型编码器,将其转化为泛型。
  • 第三章介绍用Generic派生自定义类型类实例,并创建一个将Scala中的数据编码为CSV格式的类型类,但该例子所用的技术可以扩展到许多情形。此外还介绍了shapeless中的Lazy类型,可以处理像列表(list)以及树(tree)等类型的递归数据。
  • 第四章介绍前几章涉及的理论和编程模式,特别是针对依赖类型(dependent type)、类型依赖函数(dependently typed function)以及类型级别编程(type level programming),这些能使我们进入更高级的shapeless应用。
  • 第五章介绍LabelledGeneric,它是Generic的一个变体,它将字段名称和类型名称转换为其泛型表示的一部分。还介绍了一些理论知识:字面类型( literal)、单例类型(singleton)、幻象类型(phantom)和标记类型(type tagging)。我们会创建一个在输出中保持字段和类型名称不变的JSON编码器,以此来演示LabelledGeneric。

第二部分介绍在shapeless.ops包中提供的“ops类型类”,它来源于一个处理泛型表示工具的扩展库。在接下来的三章仅为大家介绍入门理论,而不是介绍每一个操作(op)的细节。

  • 第六章从宏观上介绍ops类型类,并给出了一个例子,通过将几个简单操作串联,从而组成一个强大的“模式类迁移(case class migration)”工具。
  • 第七章介绍多态函数(ploymorphic functions)亦称Poly,并展示在ops类型类中如何使用多态函数对“泛型表示”进行映射(mapping)、平面映射(flat mapping)和折叠(fold)操作。
  • 第八章介绍shapeless的Nat类型,它在类型级别表示自然数。介绍几个相关的ops类型类并用Nat建立我们自己的ScalaCheck(一个Scala测试框架)中的Arbitrary(随机数生成)类。

四、总结

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《类型编程晋级——shapeless类库使用指南》前言及第一章翻译

    从年初开始进行此项工作,我和合作伙伴包亮付出了大量而艰辛的劳动。翻译中我们本着能够让所有人看明白、看懂的目的,反复修改高达五次。现基本翻译完毕,有出版意向,如果...

    魏守峰
  • Cesium几个案例介绍

    前言 本文为大家介绍几个Cesium的Demo,通过这几个Demo能够对如何使用Cesium有进一步的了解,并能充分理解Cesium的强大之处和新功能。其他的无...

    魏守峰
  • linux下快速列出文件列表的方法

    前言 这两天碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之...

    魏守峰
  • Nim教程【七】

    这是国内第一个关于Nim的系列教程 先说废话 很开心,在今天凌晨快一点多的时候拿到了 nim-lang.com;nim-lang.cn;nim-lang.net...

    liulun
  • 「干货」基本数据类型和引用数据类型的区别

    今天继续来讲面试,已经出了很多java一面真题系列文章了,之后也会整理成一个系列,欢迎持续关注哦。

    用户7656790
  • Java泛型和通配符那点事

    泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数...

    xiangzhihong
  • springboot配置之在配置文件中配置debug=true开启自动配置类报告

    绝命生
  • Java SE | 基础语法day08

    API (Application Programming Interface) :应用程序编程接口。

    剑走天涯
  • typescript基础一览,助你从入门到放弃!

    ts作为一个超级js,这两年是越来越火,我辈中人如何能不馋他,故观其大概后,迫不及待分享给大家,自己加深印象同时,又帮助大家,岂不美哉!本文分为三个部分,基础语...

    用户7413032
  • 蓦然认知戴帅湘:做新一代决策引擎,比DuerOs走得垂直纵深

    安妮 发自 三里屯 量子位 出品 | 公众号 QbitAI 蓦然认知的CEO戴帅湘说,蓦然认知这个名字,还得拆开看。 蓦然”取自“众里寻他千百度,蓦然回首,那人...

    量子位

扫码关注云+社区

领取腾讯云代金券