I'm not quite sure what you are trying to achieve here, if I understand correctly, you want not to print (a:Int, b:Int, x:Double, y:Double, name:String) twice.
How about defining FType yourself and then just reusing it in f and callF ?
object Foo { type FType = (Int,Int,Double,Double,String) => Unit def f: FType = (a, b, x, y, name) => () def callF(func: FType) = func(0,0,0,0,"") }
If you really want to FType , this is a much different problem, but it doesn't seem to be that way, since you force the type by calling func(0,0,0,0,"") .
You do not have decltype in Scala, because types are not first class citizens, for example, they can be in Idris, for example. However, you must write this using Shapeless and / or macros.
If you want to fix the types and arguments and reuse them, the easiest solution is to turn them into a case class . Then you can use import to directly access your fields:
object Foo { case class FArgs(a: Int, b: Int, x: Double, y: Double, name: String) def f(args: FArgs): Unit = { import args._ println(name)