专栏名称: ScalaCool
目录
相关文章推荐
东方财富网  ·  主力复盘:8.81亿流入融发核电 ... ·  昨天  
投资明见  ·  徐小明:周四操作策略(0612) ·  2 天前  
51好读  ›  专栏  ›  ScalaCool

Shapeless 入门指南(三): Nat 和 implicit 在 shapeless 中的应用

ScalaCool  · 掘金  ·  · 2018-02-06 01:54

正文

请到「今天看啥」查看全文


该如何实现这样的 at 方法?

def at(n: Int): X

首先我们想到的是用类型参数实现

def at[A](n: Int): A

然而调用时,仍旧需要手工指定 A 的类型。 同时,不用类型参数的前提下,一个方法又只能返回一种类型

下面我们介绍一种使用带抽象类型成员 typeclass 来解决返回不同类型的套路

实现基于 Nat at 函数

为了简化问题,先用 Nat 代替 Int 表示元素所在的位置

 def at(n: Nat): X

为了实现这个函数,我们先介绍一个套路:

如果一个类型 O 由其他几个类型 I1 , I2 ,.. In 决定

那么我们可以构造一个 X[I1, I2, .., In] { type Out = O} 这样的 typeclass 用来计算出 O 对应类型

套用到上面的方法: HList 本身类型和元素所在位置 n,可以决定返回类型,我们可以得到以下定义


trait At[L <: HList, N <: Nat] {
  type Out
  def apply(l: L): Out
}

implicit class HListSyntax[L <: HList](l: L) {
    def at(n: Nat)(implicit at: Nat






请到「今天看啥」查看全文