Мне нужно разъяснение лени с Haskell.
Если у меня есть эта функция:
myFunction arg
| arg == 1 = a
| arg == 2 = a*b
| arg == 3 = b+c
| otherwise = (a+b)*c
where
a = ...
b = ...
c = ...
d = ...
Когда я вызываю myFunction 1
, Haskell будет оценивать только a = ...
, ни b, ни c, ни д.
Но если я пишу
myFunction arg
| arg == 1 = a
| arg == 2 = a*b
| arg == 3 = b+c
| otherwise = (a+b)*c
where
(a,b,c,d) = anotherFunction arg
Каким будет поведение Haskell?
- Будет ли он оценивать только a и "распространять" ленивость на
anotherFunction
? - Или он будет оценивать весь набор (a, b, c, d) как результат
anotherFunction
?