Scala 有没有什么特别的原因使这种类型不是通用的DFA?如果是的话,它到底是什么?

Scala 有没有什么特别的原因使这种类型不是通用的DFA?如果是的话,它到底是什么?,scala,haskell,automata,Scala,Haskell,Automata,我正在整理Scala中的基本结构库,用于生产或个人学习。我的重点是在类型理论、cat理论和集合论中对上述结构的清晰描述。其中一种, abstract case class Fold[A, B]() { type I def trans: I => A => I def start: I def output: I => B def cojoin: Fold[A, Fold[A, B]] def copoint: B def dimap[Z

我正在整理Scala中的基本结构库,用于生产或个人学习。我的重点是在类型理论、cat理论和集合论中对上述结构的清晰描述。其中一种,

abstract case class Fold[A, B]() {
  type I
  def trans: I => A => I
  def start: I
  def output: I => B

  def cojoin: Fold[A, Fold[A, B]] 
  def copoint: B    
  def dimap[Z, C](f: Z => A, g: B => C): Fold[Z, C]
 }
这是我相当确定的同构, 学分:

在我看来,其中一种类型非常类似于DFA,而且
科米特先生基本上也这么说。我的问题是,如果不是DFA,那么这种类型是什么?

这种类型不代表DFA,因为它太笼统了。具体来说,I类型可能具有无限多个值。如果你把I做为某种序列,或者更好,两个序列与表示有限状态的东西配对,你可以很容易地直接模拟一个图灵机

abstract case class Fold'[A, B]() {
  type W
  def MonW: Monoid[W]
  def tally: A => W
  def summerize: W => B
}