我正尝试使用symulacrum
的{{1}}来避免编写Ops / Syntax样板。我有一个特质参数化为effect和类型:
@typeclass
目的如下:
@typeclass trait Close[F[_], T]{
def close(t: T): F[Unit]
}
我之所以决定放弃trait Stream[F[_], Pipe]{
def open(): F[Pipe]
def drain(): F[Unit]
}
object App{
def runApp[F[_], Pipe: Close[F, ?]](implicit stream: Stream[F, Pipe]) = {
for{
pipe <- stream.open()
_ <- stream.drain(pipe)
_ <- pipe.close()
} yield ()
}
}
是因为我的应用程序中的某些Close[F[_], T]
本质上是不可关闭的,因此把它放进去有点奇怪
所有Pipe
的close方法
这是我得到的错误:
Pipe
问题: :如果Error:(32, 4) @typeclass may only be applied to types that take a single type parameter
@typeclass trait Close[F[_], T]
具有多个类型参数(例如trait
),我是否必须编写所有操作/语法我自己的样板和sym的Close[F[_], T]
在这里无济于事?
答案 0 :(得分:4)