1
sealed trait Process[+F[_], +O]
/**
 * Created by pach on 11/07/14.
 */
package object stream {

  type Process0[+O] = Process[Nothing,O]
...
}

这就是Process0的定义方式。

实际上我不明白为什么会编译,因为Nothing没有类型参数。

表示没有效果的流

为什么不直接将上下文类型F设置为值类型本身(使用标识类型构造函数scalaz.Scalaz.Id)。

type Process0[+O] = Process[Id, O]
4

1 回答 1

1

Scala 编译器的处理Nothing方式与其他类型略有不同,例如,相同的技巧不适用于Null,尽管它是所有引用类型的底层类型。implicits您可以使用特殊方法检查子类型关系<:<,如下所示:

scala> implicitly[Nothing <:< List[_]]
res1: <:<[Nothing,List[_]] = <function1>

如果没有关系,你会看到:

scala> implicitly[Null <:< Int]
<console>:8: error: Cannot prove that Null <:< Int.
              implicitly[Null <:< Int]

至于你的主要问题,我对scalaz-streams不太熟悉,但据我所知Id,类型本身就是一种类型,即type Id[A] = A,如果你有Process[Id, O],这意味着你有一些无效的输入,它给出了一些输出. 但如果Process0根本不应该有任何输入,它应该只产生一些输出。

于 2014-09-13T13:23:23.640 回答