上下文感知类型类



我正在开发一些可以处理硬盘上文件的应用程序。我有以下"实体":

final case class File(path: String)
final case class FileChecksum(f: File, checksum: Long)

我还有以下类型类:

trait Checksum[T]{
def checksum(t: T): Long
}

所有这些都是由以下特征操作的:

trait Model{
def fromFile(file: File)(implicit checksum: Checksum[File]): FileChecksum
}

而且它看起来很好。但我决定重构它并应用无标签的final。所以现在的模型看起来像:

trait Model[F[_]]{
def fromFile(file: File)(implicit checksum: Checksum[F, File]): F[FileChecksum]
}
trait Checksum[F[_], T]{
def checksum(t: T): F[Long]
}

令我困惑的问题是类型类trait Checksum[F[_], T]。现在它取决于上下文F。那真的是打字课吗?或者我看错方向了?

我相信Checksum[F[_],T]仍然是一个类型类,但它现在由一个更高级的kinded类型(HKT(参数化,该类型采用单参数类型构造函数。

因此,F将List或Option等构造函数作为参数类型。即:

def checksum(t: T): F[Long]

其返回类型为F[Long]的函数可以实现为返回List[Long]或Option[Long]。

我希望这能有所帮助。另请参阅:https://typelevel.org/blog/2016/08/21/hkts-moving-forward.html和https://www.atlassian.com/blog/archives/scala-types-of-a-higher-kind

相关内容

  • 没有找到相关文章

最新更新