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を値型自体に設定しないのはなぜですか(ID型コンストラクターを使用して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] = AProcess[Id, O]Process0

于 2014-09-13T13:23:23.640 に答える