2013-12-04 4 views
2

Возможно ли передать HList в качестве параметра функции?Использование HLists в качестве аргументов функции

Это то, что я до сих пор:

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] 

ответ

5

Текст ошибки содержит решение:

import shapeless.ops.hlist.Mapper 

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

Метод map принимает неявный параметр и вы должны указать такой параметр (добавив тот же параметр в объявление ваш метод).

Смежные вопросы