Size: a a a

2021 January 03

YS

Yan Shkurinskiy in Haskell
т.к. будут ссылать на другие кложуры
источник

YS

Yan Shkurinskiy in Haskell
(поправьте меня если не так)
источник

к

кана in Haskell
кана
каррируется тут не применение функции, а сама функция, то есть + каррирован
-- не каррированная функция
plus1 :: (Int, Int) -> Int
plus1 (a, b) = a + b
-- каррированная
plus2 :: Int -> Int -> Int
plus2 = \a -> \b -> a + b
-- или
plus2 a b = a + b

а ((+) 1) это просто применение аргумента, ничего о каррированности тут нет

curry plus 1

вот тут есть каррированние
источник

YS

Yan Shkurinskiy in Haskell
Сергей наверное перепутал
источник

С

Сергей in Haskell
видимо да
источник

С

Сергей in Haskell
но тогда почему частично примененная функция это каф а лямбда не каф
источник

YS

Yan Shkurinskiy in Haskell
наверное, потому что лямбда возвращает функцию, в теле которой тоже кложура
источник

YS

Yan Shkurinskiy in Haskell
блин, пора знатокам подключиться, а то я тут наговорю всякого(
источник

С

Сергей in Haskell
а когда Вершилов вернется ?
источник

YS

Yan Shkurinskiy in Haskell
"А Саша выйдет?" (с)
источник

YS

Yan Shkurinskiy in Haskell
(не знаю)
источник

YS

Yan Shkurinskiy in Haskell
можно попробовать сравнить стг x -> x + 1 и (+1)
источник

YS

Yan Shkurinskiy in Haskell
и может будет чего видно
источник

YS

Yan Shkurinskiy in Haskell
module Main where

foo :: Int -> Int
foo = \x -> x + 1

main :: IO ()
main = print (foo 1)


-- незначимые части стг
--
Main.foo :: GHC.Types.Int -> GHC.Types.Int
[GblId, Arity=1, Unf=OtherCon []] =
   \r [x_sS1]
       let {
         sat_sS2 [Occ=Once] :: GHC.Types.Int
         [LclId] =
             CCCS GHC.Types.I#! [1#];
       } in  GHC.Num.+ GHC.Num.$fNumInt x_sS1 sat_sS2;

sat_sS5 :: GHC.Types.Int
[LclId] =
   \u []
       let {
         sat_sS4 [Occ=Once] :: GHC.Types.Int
         [LclId] =
             CCCS GHC.Types.I#! [1#]; } in
       let {
         sat_sS3 [Occ=Once] :: GHC.Types.Int
         [LclId] =
             CCCS GHC.Types.I#! [1#];
       } in  GHC.Num.+ GHC.Num.$fNumInt sat_sS3 sat_sS4;

Main.main :: GHC.Types.IO ()
[GblId] =
   \u [] System.IO.print GHC.Show.$fShowInt sat_sS5;

:Main.main :: GHC.Types.IO ()
[GblId] =
   \u [] GHC.TopHandler.runMainIO Main.main;
источник

YS

Yan Shkurinskiy in Haskell
module Main where

foo :: Int -> Int
foo = (+1)

main :: IO ()
main = print (foo 1)


-- незначимые части стг
--
ds_rRn :: GHC.Types.Int
[GblId, Caf=NoCafRefs, Unf=OtherCon []] =
   CCS_DONT_CARE GHC.Types.I#! [1#];

Main.foo :: GHC.Types.Int -> GHC.Types.Int
[GblId, Arity=1, Unf=OtherCon []] =
   \r [ds1_sS3] GHC.Num.+ GHC.Num.$fNumInt ds1_sS3 ds_rRn;

sat_sS5 :: GHC.Types.Int
[LclId] =
   \u []
       let {
         sat_sS4 [Occ=Once] :: GHC.Types.Int
         [LclId] =
             CCCS GHC.Types.I#! [1#];
       } in  GHC.Num.+ GHC.Num.$fNumInt sat_sS4 ds_rRn;

Main.main :: GHC.Types.IO ()
[GblId] =
   \u [] System.IO.print GHC.Show.$fShowInt sat_sS5;

:Main.main :: GHC.Types.IO ()
[GblId] =
   \u [] GHC.TopHandler.runMainIO Main.main;
источник

YS

Yan Shkurinskiy in Haskell
тут видно, что (+1) во втором случае вынесена в топ-левел
источник

YS

Yan Shkurinskiy in Haskell
хотя, стоп...
источник

YS

Yan Shkurinskiy in Haskell
тут кажется 1 вынесен в топ-левел)
источник

YS

Yan Shkurinskiy in Haskell
а в первом случае он постоянно аллоцируется при вызове
источник

YS

Yan Shkurinskiy in Haskell
насколько я понял
источник