Почему getArgs оценивается после аргумента метода fmap? - PullRequest
0 голосов
/ 04 января 2019

Почему getArgs вычисляется после аргумента метода fmap?

main::IO()
main=do
    fpath<-fmap head getArgs
    putStrLn fpath

Я получаю ошибку: Exception: Prelude.head: empty list Кажется, он применяет голову к чему-то, что еще не было вычислено.

Сначала я предположил, что это может быть еще одно правило о лени, что я не знаю, что плохо знаком с Хаскеллом, поэтому я попробовал:
a<-fmap head getLine # без проблем
a<-fmap head (readFile [filename]) # опять не проблема

Так почему же getArgs особенный, который оценивается после?

1 Ответ

0 голосов
/ 04 января 2019

Если head разрывается в пустом списке, это означает, что getArgs сделал уже оценил, потому что значение [] было создано и соответствует head.

Скорее всего, вы запустили вашу программу с ghci, которая может дать такой эффект. Поскольку head небезопасно, вам следует проверить, присутствует ли хотя бы один аргумент в списке.

...