Type families
Jul. 22nd, 2008 02:40 pmТолько недавно понял, что это то же самое, что и 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
Date: 2008-07-22 11:08 am (UTC)no subject
Date: 2008-07-22 11:39 am (UTC)А ты GADT применяешь? Если да - то это тот же GADT, только теперь его можно расписывать в разных модулях. Аналог из ОО - базовый класс и куча его наследников.
Если GADT не применяешь, то доводы за его использование - это более строгий контроль типов.
no subject
Date: 2008-07-22 11:45 am (UTC)GADT'ы до сих пор не применял. за пояснение спасибо, как столкнусь ближе с GADT'ами - вернусь к этому посту и буду думать :)
no subject
Date: 2008-07-22 12:13 pm (UTC)http://lomeo.livejournal.com/19562.html
А сейчас мне удалось увидеть это немного по другому. Я никогда не думал о type families как о dependent types. А DT - это тема, которая мне очень интересна. Я почти одержим такой сильной статической типизацией :)