deniok: (ухмыляюсь)
deniok ([personal profile] deniok) wrote2007-11-18 12:31 am

Вторая встреча SPbHUG

Встреча прошла замечательно, все доклады понравились и свой тоже :) Правда свой я безбожно затянул - вместо положенного часа болтал часа полтора как минимум.

Подтверждения моей сугубо личной теории, что плотность правильных людей повышается при приближении к станции метро "Московская", наблюдались, как по факту поездки так и по косвенной информации :) Разрабатываю планы по вытаскиванию соседей в "Республику Кофе" :)

Выложил презентацию своего доклада на сайте SPbHUG.

[identity profile] deni-ok.livejournal.com 2007-11-18 09:18 am (UTC)(link)
Чужую не хочется, а свою - не умеем :)

Надо будет загрузить знакомых дизайнеров.

[identity profile] kurilka.livejournal.com 2007-11-18 09:28 am (UTC)(link)
Ну эт так, "мелкое брюзжание" :)
Кстати вот эти всякие теоремы Вадлера и пр. - у тебя в докладе были реальные "живые" примеры для демонстрации практического применения их?

[identity profile] deni-ok.livejournal.com 2007-11-18 11:18 am (UTC)(link)
build/fold и map/map rules используются для оптимизаций в Rewrite rules в GHC.

Есть ещё destroy/unfoldr rule для
destroy :: forall a.forall c.(forall b. (b -> Maybe (a,b)) -> b -> c) -> [a] -> c
unfoldr :: forall a.forall b.(b -> Maybe (a,b)) -> b -> [a]

для того же самого, что build/fold.

И ещё Concatenates Vanish Rule, позволяющее элиминировать конкатенации списков:

Для любой
g :: forall b.b -> (A -> b -> b) -> (b -> b -> b) -> b

выполняется теорема
g [] (:) (++) = vanish g

где
vanish :: forall a. (forall b.b -> (a -> b -> b)
                              -> (b -> b -> b)) -> [a]
vanish g = g id (\x h ys -> x:(h ys)) (.) []

Но этого в GHC не используют, хотя программист при желании может сам задать соответствующие правила.

Фишка в применении Free Theorems в том, что функции должны быть под них заточены. Библиотечные реализации многих функций из Prelude написаны так, чтобы быть хорошими консьюмерами и продюсерами для List Fusion.