type Pipe[F[_], -I, +O] = Stream[F, I] => Stream[F, O]
I understand F[_], -I , +O. The missing part is F in the right. Why not Stream[F[_]]?
I guess the F in the left and right have different meaning. Is there any official doc about the rule to write type definition?
I check the kind of Stream,
scala> :kind fs2.Stream
fs2.Stream's kind is X[+F[A1],+A2]
in another case:
scala> trait Functor [F[_]] {
| def map[A,B] (fn: A=>B)(fa: F[A]): F[B]
| }
trait Functor
scala> :kind Functor
Functor's kind is X[F[A]]
why the F[A] is not replaced by F? Of course, I am confused with different concepts, but where should I learn them in one places.