使用HLists作为函数的参数

时间:2013-12-04 07:04:28

标签: scala shapeless

是否可以将HList作为函数参数传递?

这是我到目前为止所做的:

import shapeless._
import poly._

object id extends (Id ~> Id) {
  def apply[T](f: shapeless.Id[T]): shapeless.Id[T] = f
}

object ListHandler {
  def mapOverHlist[ListType <: HList](list: ListType) = list.map(id)
}

val x = "foo" :: "bar" :: 0xb33f :: HNil    
ListHandler.mapOverHlist(x)

导致此错误:

could not find implicit value for parameter mapper:   
shapeless.ops.hlist.Mapper[ShapelessSpec.this.id.type,ListType]

1 个答案:

答案 0 :(得分:5)

错误文本包含解决方案:

import shapeless.ops.hlist.Mapper

def mapOverHlist[L <: HList](list: L)(implicit m: Mapper[id.type, L]): m.Out =
  list.map(id)

方法map接受隐式参数,您应该提供这样的参数(通过在方法声明中添加相同的参数)。