通过多个类型参数使用类型类

时间:2019-02-16 13:18:12

标签: scala functional-programming typeclass simulacrum

我正尝试使用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]在这里无济于事?

1 个答案:

答案 0 :(得分:4)

独自一人。

https://github.com/mpilquist/simulacrum#known-limitations

  

已知限制

     
      
  • 当前仅支持抽象为适当类型或一元类型构造函数的类型类。
  •