gat*_*ado 8 haskell typeclass overlapping-instances
有时候,我遇到了Haskell只匹配实例头的"特性",即
instance (a ~ NewDataTyp b) => C a
Run Code Online (Sandbox Code Playgroud)
现在将匹配任何类型,即C在程序中编写另一个实例声明将是一个错误,即使它不会因上下文而发生冲突a ~ NewDataTyp b.有时,需要付出很多努力才能克服; 我不得不重组数百行代码以避免这种限制.
是否有任何语言扩展或后代语言(Curry?Agda?)的设计具有更高的表现力优先级?这可能会牺牲(a)类型类世界的开放性(b)多项式时间类型检查.
编辑 - 对于那些对这个问题感兴趣的人,这个页面也许是有趣的:http://www.haskell.org/haskellwiki/Future_of_Haskell
不管怎样,Scala 接受您刚刚编写的内容的或多或少的直译。我不确定它有多大用处。
trait C[T]
case class NewDataType[T]()
implicit def letItBeInjectiveWhyNot[K[_],T]: K[T] =:= K[T]
implicit def cIsh[A,S](implicit ev: A =:= NewDataType[S]): C[A]
implicit def another: C[Int]
implicitly[C[NewDataType[String]]]
implicitly[C[Int]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |