Существуют ли какие-либо языковые расширения или потомки языка Haskell, которые предпочитают выразительность, особенно в обработке экземпляров?
Иногда я сталкиваюсь с "особенностью", что Haskell соответствует только головкам экземпляров, а именно:
instance (a ~ NewDataTyp b) => C a
теперь будет соответствовать любому типу, то есть писать объявление другого экземпляра C
в вашей программе будет ошибка, даже если она не может конфликтовать из-за контекста a ~ NewDataTyp b
, Время от времени требуется много усилий для преодоления; Мне пришлось реструктурировать сотни строк кода, чтобы избежать этого ограничения.
Существуют ли какие-либо языковые расширения или языки-потомки (Curry? Agda?), Которые разработаны с более высоким приоритетом для выразительности? Это может принести в жертву (а) открытость мира классов типов (б) проверку типов за полиномиальное время.
изменить - для тех, кто интересуется вопросом, эта страница также может быть интересна: http://www.haskell.org/haskellwiki/Future_of_Haskell
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]]