http://helvegr.livejournal.com/ ([identity profile] helvegr.livejournal.com) wrote in [personal profile] deniok 2009-10-18 10:50 am (UTC)

По идее, трансформация (. f) . g в g(x, f z) убирает ненужную partial application. Про @unpl я знаю, интересно было, работает ли это из коробки.

На моём маленьком примере работает:

Исходник:

g :: (a -> b) -> [a] -> [b]
g f l = map f (tail l)

h :: (a -> b) -> [a] -> [b]
h = (. tail) . map

Core:

h :: forall a_afx b_afy.
          (a_afx -> b_afy) -> [a_afx] -> [b_afy]

h =
  \ (@ a_afP)
    (@ b_afQ)
    (x_ayH :: a_afP -> b_afQ)
    (eta_syZ :: [a_afP]) ->
    map @ a_afP @ b_afQ x_ayH (tail @ a_afP eta_syZ)

g :: forall a_afA b_afB.
          (a_afA -> b_afB) -> [a_afA] -> [b_afB]
      
g =
  \ (@ a_agK)
    (@ b_agL)
    (f_afD :: a_agK -> b_agL)
    (l_afF :: [a_agK]) ->
    map @ a_agK @ b_agL f_afD (tail @ a_agK l_afF)


Как можно видеть, Core-представление обоих функций идентично.

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