で、Scalaでこのようなのを定義したい場合、無理やりequi-recursive-typeをエミュレートすることもできますが、
それやると型が複雑になるので、これくらいでとどめておくのが良いような気がします。

scala> case class FTuple[X](_1: X, _2: X => FTuple[X])
defined class FTuple

scala> def f(a: Int)(b: Int): FTuple[Int] = FTuple(a + b, f(a + b))
f: (a: Int)(b: Int)FTuple[Int]

scala> f(3)(4)
res0: FTuple[Int] = FTuple(7,<function1>)

scala> res0._1
res1: Int = 7

scala> res0._2(5)
res2: FTuple[Int] = FTuple(12,<function1>)