deniok: (пацифик)
[personal profile] deniok
А вот подскажите, на Haskell Wiki вот тут в последнем абзаце дурь написана, да? Никакой разницы между встроенными и пользовательскими частично примененными функциями нет?
Prelude> (+) undefined `seq` 5
5
Prelude> const undefined `seq` 5
5
Prelude> (\x y -> x) undefined `seq` 5
5
Или это только в последней версии GHC?

UPD. Нет, понял, там все верно, сам дурак. Пусть висит, демонстрирует мою глупость urbi et orbi.

Date: 2015-09-30 09:10 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
А вот более интересный вопрос: к какой WHNF был приведен левый операнд seq вот здесь:
Prelude> (\True y -> ()) False `seq` 5
5
Я знаю ответ, и он не противоречит цитируемому абзацу, но как задачка на понимание вопрос хорош.

Date: 2015-09-30 09:56 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
а, хороший вопрос.

наверное, получится функция наподобие (\y -> raise "Pattern mismatch")

Date: 2015-09-30 10:08 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Вот все-таки я нашел гадость:
Prelude> (\True y -> ()) False `seq` 5
5
Prelude> (\True -> (\y -> ())) False `seq` 5
*** Exception: :21:2-20: Non-exhaustive patterns in lambda
Мне кажется так не должно быть, хотя я понимаю, почему так получается.

Date: 2015-09-30 10:13 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
В ответ на ответ на вопрос: да типа того. Поскольку паттерн-матчинг транслируется в сase, то это можно записать так: \y -> case True of False -> ()

Profile

deniok: (Default)
deniok

February 2022

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

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 29th, 2025 02:58 pm
Powered by Dreamwidth Studios