如何在scala中定义某个递归类型

Mik*_*ouk 0 recursion types scala

假设我有一个类型A。如何B在 scala 中定义类型,即Unittuple 或 tuple (A, B)

我想建模一种B[A]可以是

(), (A, ()), (A, (A, ())), (A, (A, (A, ()))), (..., (A, (A, (A, ())))). 
Run Code Online (Sandbox Code Playgroud)

我见过这样的事情

trait B[A] extends (A, B) {}
Run Code Online (Sandbox Code Playgroud)

或示例

`#` 运算符在 Scala 中是什么意思?

但由于Unit缺少终止可能性,因此无法使用我发现的内容。

谢谢你。

Dan*_*ani 7

下面怎么样(类似于如何List定义):

trait NestedTuple[+A]

case class Tup[A](a: A, tail: NestedTuple[A]) extends NestedTuple[A]
case object End extends NestedTuple[Nothing]

val t1: NestedTuple[Int] = End      
t1: NestedTuple[Int] = End

val t2: NestedTuple[Int] = Tup(1, Tup(2, End)) 
t2: NestedTuple[Int] = Tup(1,Tup(2,End))
Run Code Online (Sandbox Code Playgroud)