Про seq

Oct. 1st, 2015 12:29 am
deniok: (typed lambda)
[personal profile] deniok
Как известно seq вычисляет свой первый аргумент до слабой заголовочной нормальной формы (WHNF). Не пользуясь GHCi, ответьте на вопрос, каково будет значение следующего выражения
Prelude> (\True y -> ()) False `seq` 5
Проверьте себя в GHCi. Какова будет полученная в первом аргументе seq WHNF?

UPD. А теперь вопрос на засыпку: каково будет значение следующего выражения
Prelude> (\True -> \y -> ()) False `seq` 5
Считаете ли вы это правильным?

Date: 2015-10-03 11:35 am (UTC)
From: [identity profile] kurilka.livejournal.com
Интересно, что эту WHNF GHC тупо выкидывает (что логично т.к. мы её не используем):
qrilka@qdesktop ~ $ ghc -ddump-simpl seq.hs
[1 of 1] Compiling Main             ( seq.hs, seq.o )

==================== Tidy Core ====================
Result size of Tidy Core = {terms: 7, types: 6, coercions: 0}

main :: IO ()
[GblId, Str=DmdType]
main = print @ Integer GHC.Show.$fShowInteger (__integer 5)

:Main.main :: IO ()
[GblId, Str=DmdType]
:Main.main = GHC.TopHandler.runMainIO @ () main

Linking seq ...
qrilka@qdesktop ~ $ cat seq.hs
main = print $ (\True y -> ()) False `seq` 5

Или есть вариант, когда такая конструкция будет иметь смысл в реальной жизни?

Date: 2015-10-03 01:35 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
А вторую конструкцию, (\True -> \y -> ()) False `seq` 5?

Date: 2015-10-03 02:29 pm (UTC)
From: [identity profile] kurilka.livejournal.com
main :: IO ()
[GblId, Str=DmdType]
main =
  print
    @ Integer
    GHC.Show.$fShowInteger
    (case Control.Exception.Base.patError
            @ (GHC.Prim.Any -> ()) "seq.hs:1:17-33|lambda"#
     of wild_00 {
     })

ну и -O0 на результат не влияет ни в том ни в другом случае

Date: 2015-10-03 02:30 pm (UTC)
From: [identity profile] kurilka.livejournal.com
а, хотя -O0 же по дефолту, так что странно былоб иное

Profile

deniok: (Default)
deniok

February 2022

S M T W T F S
  12345
6789101112
13141516171819
20212223 242526
2728     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 5th, 2025 07:52 am
Powered by Dreamwidth Studios