如何在scala中定义某个递归类型
假设我有一个类型如何在scala中定义某个递归类型,scala,recursion,types,Scala,Recursion,Types,假设我有一个类型a。我如何在scala中定义类型B,它是单位或元组(a,B) 我想建模一个类型B[a],它可以 (), (A, ()), (A, (A, ())), (A, (A, (A, ()))), (..., (A, (A, (A, ())))). 我见过这样的事情 trait B[A] extends (A, B) {} 或在 但由于缺少终止单元的可能性,因此无法使用我发现的内容 谢谢。它看起来像是免费的单子。您可以从scalaz库或cats获取一个实现,它看起来像一个免费的Mo
a
。我如何在scala中定义类型B
,它是单位
或元组(a,B)
我想建模一个类型B[a]
,它可以
(), (A, ()), (A, (A, ())), (A, (A, (A, ()))), (..., (A, (A, (A, ())))).
我见过这样的事情
trait B[A] extends (A, B) {}
或在
但由于缺少终止单元
的可能性,因此无法使用我发现的内容
谢谢。它看起来像是免费的单子。您可以从
scalaz
库或cats
获取一个实现,它看起来像一个免费的Monad。您可以从scalaz
库或cats
中获取一个实现,以下内容如何(类似于列表
的定义):
以下内容如何(类似于列表
的定义):
您需要使用密封特征(alegbraic数据类型)对类型安全性的可能性进行编码 看看Shapess[1]中的HList是如何实现这一点的
sealed trait HList
sealed trait HNil extends HList
case object HNil extends HNil
case class ::[+H, +T <: HList](head: H, tail: T) extends HList
@ val xs = 1 :: 2.0 :: "three" :: HNil
xs: Int :: Double :: String :: HNil = 1 :: 2.0 :: three :: HNil
HList
密封特征HNil扩展HList
案例对象HNil扩展HNil
案例类::[+H,+T您需要使用密封特征(alegbraic数据类型)来编码类型安全性的可能性
看看Shapess[1]中的HList是如何实现这一点的
sealed trait HList
sealed trait HNil extends HList
case object HNil extends HNil
case class ::[+H, +T <: HList](head: H, tail: T) extends HList
@ val xs = 1 :: 2.0 :: "three" :: HNil
xs: Int :: Double :: String :: HNil = 1 :: 2.0 :: three :: HNil
HList
密封特征HNil扩展HList
案例对象HNil扩展HNil
案例类别::[+H,+T我认为它更像shapless中的HList。我不知道它与free有多大关系。@Stephen,实际上,它甚至是类型列表
,因为所有元素都有相同的类型。我认为它更像shapless中的HList。我不知道它与free有多大关系。@Stephen,实际上,它甚至是类型列表
,因为所有元素都是elemeNT具有相同的类型。类型B[A]=列表[A]
类型B[A]=列表[A]