At times, I run into the "feature" that Haskell only matches instance heads, namely,
instance (a ~ NewDataTyp b) => C a
will now match any type whatsoever, i.e. writing another instance declaration of C
in your program will is an error, even if it cannot possibly conflict due to the context a ~ NewDataTyp b
. At times, it takes a lot of effort to overcome; I've had to restructure hundreds of lines of code to avoid this limitation.
Are there any language extensions, or descendant languages (Curry? Agda?) that are designed with a higher priority for expressiveness? This could possibly sacrifice (a) openness of the typeclass world (b) polynomial time typechecking.
edit -- for those interested in the question, this page might also be of interest: http://www.haskell.org/haskellwiki/Future_of_Haskell
For what it's worth, Scala accepts the more-or-less literal translation of what you just wrote. I'm not sure how useful it is.
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]]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With