2016-10-29 5 views
-3

В следующем коде, я получаю ошибку синтаксического анализа на вход `MYFUNCTION ':Почему я получаю ошибку синтаксического анализа на MYFUNCTION

import System.Environment (getArgs) 
interactWith function inputFile outputFile = do 
    input <- readFile inputFile writeFile outputFile (function input) 
main = mainWith myFunction 
where mainWith function = do   
     args <- getArgs   
     case args of    
      [input,output] -> interactWith function input output   
      _ -> putStrLn "error: exactly two arguments needed" 
     -- replace "id" with the name of our function below  
     myFunction = id 
+1

Как только вы исправите свою ошибку с помощью 'myFunction', вы столкнетесь с ошибкой в' interactiveWith', потому что вы не можете закончить блок do со связью. Я бы предложил попытаться скомпилировать ваш код чаще. –

+0

@ReinHenrichs Я только что заметил это и включил предполагаемое исправление в свой ответ. – chepner

ответ

1

myFunction = id потребности выстраиваться с другой вещью, определенной в пункте where.

main = mainWith myFunction 
where mainWith function = do   
    ^args <- getArgs   
    | case args of    
    |  [input,output] -> interactWith function input output   
    |  _ -> putStrLn "error: exactly two arguments needed" 
    | -- replace "id" with the name of our function below  
    | myFunction = id 
    |^
    | | 
    | here 
    | 
    not here 

Тот же самый код с большим отступом, чтобы понять:

import System.Environment (getArgs) 
interactWith function inputFile outputFile = do 
    input <- readFile inputFile 
    -- I assume a line break belongs here 
    writeFile outputFile (function input) 
main = mainWith myFunction 
    where mainWith function = do   
       args <- getArgs   
       case args of    
        [input,output] -> interactWith function input output   
        _ -> putStrLn "error: exactly two arguments needed" 
      -- replace "id" with the name of our function below  
      myFunction = id 
+0

Проверьте мой обновленный код, сделал то, что вы сказали, все еще получая ошибку синтаксического анализа. –

+1

@AliToto Теперь он выровнен с 'args'. Вы можете использовать более одного места для отступов. – molbdnilo

+0

'myFunction' не является частью блока' do', что вы говорите, выстроив его с помощью 'args'. – chepner

0

В Haskell это плохая практика, чтобы сделать это:

where a = x 
    b = y 

Это может привести к ошибкам, потому что ISN 't выстроились так же, поэтому, пожалуйста, сделайте CRNL после того, где:

where 
    a = x 
    b = y