deniok: (Default)
[personal profile] deniok
Сегодня на stackoverflow, отвечая на вопрос, Andreas Hammar привёл хорошие примеры. Сохраняю на будущее, как простые задачки для студентов
data    D a = D a
data    S a = S !a
newtype N a = N a

constD x (D y) = x
constS x (S y) = x
constN x (N y) = x
Какие из следующих вызовов завершат свою работу как Deep Thought, а какие как Earth?
D undefined `seq` 42
S undefined `seq` 42
N undefined `seq` 42
constD 42 undefined
constS 42 undefined
constN 42 undefined

Date: 2012-11-27 08:39 am (UTC)
From: [identity profile] lionet.livejournal.com
newtype — это создание фантомного конструктора/тэга, которого потом в рантайме не существует. Фактически, «newtype N a» это то же самое, что «a» в рантайме. Отсюда взрывание третьего и невзрывание шестого примеров. Строгий !a в типе S приводит к попытке форсирования undefined во втором примере, поэтому он взрывается. Остальное стандартно.

Date: 2012-11-27 08:48 am (UTC)
From: [identity profile] deni-ok.livejournal.com
ага, всё верно.

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 Jun. 19th, 2025 10:07 am
Powered by Dreamwidth Studios