簡體   English   中英

錯誤的類型推斷[無]

[英]Wrong type inference [Nothing]

我想運行DriverTest,但是Process.count的類型[I]更改為[Nothing] ...此代碼有什么問題?

錯誤消息是這樣的:“找到:Process [Nothing,Int],必需:Process [String,Int]”

在此處輸入圖片說明

sealed trait Process[I, O]
case class Halt[I, O]() extends Process[I, O]
case class Await[I, O](program: Option[I] => Process[I, O]) extends Process[I, O]
case class Emit[I, O](output: O, process: Process[I, O] = Halt[I, O]) extends Process[I, O]

object Driver {

  @annotation.tailrec
  def driver[I, O](process: Process[I, O], is: Stream[I], os: Stream[O] = Stream()): Stream[O] = process match {
    case Halt() => os.reverse //State: Halt -> stop driver
    case Await(program) => is match {
      case h #:: t => driver(program(Some(h)), t, os) //State: Await + Data: remain -> loop driver
      case empty   => driver(program(None), empty, os) //State: Await + Data: empty -> go to Halt
    }
    case Emit(o, process) => driver(process, is, o #:: os) //State: Emit -> save data + loop driver
  }
}

object Process {

  def loop[I, O, S](s1: S)(f: (I, S) => (O, S)): Process[I, O] = Await[I, O] {
    case Some(i) => {
      val (o, s2) = f(i, s1)
      Emit(o, loop(s2)(f))
    }
    case None => Halt()
  }

  def count[I]: Process[I, Int] = loop(0)((i: I, s: Int) => (s + 1, s + 1))
}

object DriverTest extends App {
  val input = Stream("a","b","c")
  val proc = Process.count
  val output = Driver.driver(proc, input)
}

下一行想提供幫助。

val proc = Process.count[String]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM