Entry tags:
Type families
Только недавно понял, что это то же самое, что и GADT:
Только их ещё и расширять можно. Так что алгебраические типы данных, которые можно выписывать в разных модулях уже есть :-)
data Z data S n data family List n a data instance List Z a = Nil data instance List (S n) a = Cons a (List n a) --например cadr :: List (S (S n)) a -> a cadr (Cons _ (Cons x _)) = x
Только их ещё и расширять можно. Так что алгебраические типы данных, которые можно выписывать в разных модулях уже есть :-)
no subject
no subject
А ты GADT применяешь? Если да - то это тот же GADT, только теперь его можно расписывать в разных модулях. Аналог из ОО - базовый класс и куча его наследников.
Если GADT не применяешь, то доводы за его использование - это более строгий контроль типов.
no subject
GADT'ы до сих пор не применял. за пояснение спасибо, как столкнусь ближе с GADT'ами - вернусь к этому посту и буду думать :)
no subject
http://lomeo.livejournal.com/19562.html
А сейчас мне удалось увидеть это немного по другому. Я никогда не думал о type families как о dependent types. А DT - это тема, которая мне очень интересна. Я почти одержим такой сильной статической типизацией :)