You can do this in a bit more detail using Shapeless FnToProduct, which provides syntax toProductfor converting FunctionNto Function1using HList:
import shapeless._, syntax.std.function._
type A = String
type B = Symbol
type C = Int
type D = List[String]
val hlist: A :: B :: C :: HNil = "foo" :: 'x :: 1 :: HNil
def foo(a: A, b: B, c: C): D = List.fill(c)(a + b)
def bar(hslist: A :: B :: C :: HNil): D = (foo _).toProduct.apply(hslist)
In many cases, you probably won't even need a separate definition bar.
source
share