http://deni-ok.livejournal.com/ ([identity profile] deni-ok.livejournal.com) wrote in [personal profile] deniok 2007-11-18 11:18 am (UTC)

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.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
No Subject Icon Selected
More info about formatting