Вызов функции не проблема. В вашем определении shuffle
есть проблемы с отступом, которые не являются проблемой для парсера , пока он не достигнет строки main = do
.
import System.IO
import System.Random
shuffle :: [a] -> IO [a]
shuffle list = if length list < 2 then return list else do
i <- randomRIO (0, length list-1)
r <- shuffle (take i list ++ drop (i+1) list)
return (list!!i : r)
main = do --the problem is in this line
putStrLn "Enter the number:"
number <- getLine
let n = (read number :: Int)
let list = [1..n]
print list
shuffled <- shuffle list
print shuffled
Обратите внимание на дополнительные изменения для правильной работы с IO
.