В отличие от ML, Haskell не имеет ключевого слова rec
для пометки рекурсивных определений.Вместо этого все определения могут быть рекурсивными, что означает, что в каждом определении переменной определенная переменная уже находится в области действия во время ее определения.
Таким образом, в let albumStr = albumStr ++ "nothing"
albumStr
справа от =
относитсяк определенному слева от =
, а не к определенному в строке 1. Поэтому определение бесконечно рекурсивно и зацикливается навсегда.
Если вы хотите определить переменную на основе другой, выдолжен дать ему другое имя:
let localAlbumStr = albumStr ++ "nothing"