我阅读了JOHN A DE GOES 关于无标签决赛的精彩博客。在 5.Fake Abstraction 一节中,他提到:
不幸的是,这些运算不满足任何代数定律——不满足!这意味着当我们编写多态代码时,我们无法对 putStrLn 和 getStrLn 进行一般推理。
据我们所知,这些操作可能是启动线程、创建或删除文件、按顺序运行大量单独的副作用等等。
他对应于以下无标记代数:
trait Console[F[_]] {
def putStrLn(line: String): F[Unit]
val getStrLn: F[String]
}
这是否意味着不可能为无标签代数编写定律,或者我是否误解了某些东西。