Существуют ли какие-либо языковые расширения или потомки языка 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]]
Другие вопросы по тегам