Как вызвать функцию в haskell? - PullRequest
       148

Как вызвать функцию в haskell?

0 голосов
/ 07 августа 2020

У меня есть код, который создает список, а затем перемешивает его. Но я не могу выполнить из-за проблемы с = в разделе main = do. Ошибка "parse error on input".

Это код:

import System.IO
import System.Random

shuffle :: [a] -> [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
   shuffle list

1 Ответ

4 голосов
/ 07 августа 2020

Вызов функции не проблема. В вашем определении 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.

...