8

有时,我遇到了 Haskell 仅匹配实例头的“功能”,即,

instance (a ~ NewDataTyp b) => C a

现在将匹配任何类型,即C在您的程序中编写另一个实例声明将是一个错误,即使它不可能由于上下文而发生冲突a ~ NewDataTyp b。有时,需要付出很大的努力才能克服;我不得不重组数百行代码以避免这种限制。

是否有任何语言扩展或后代语言(Curry?Agda?)被设计为具有更高的表达性优先级?这可能会牺牲(a)类型类世界的开放性(b)多项式时间类型检查。

编辑——对于那些对这个问题感兴趣的人,这个页面可能也很有趣:http ://www.haskell.org/haskellwiki/Future_of_Haskell

4

1 回答 1

1

对于它的价值,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]]
于 2013-01-15T06:27:29.680 回答