2015-10-26 4 views
3

Я пытаюсь запустить свою программу с помощью командной строки. Я пытаюсь вернуть свои аргументы из командной строки,:Запуск моей программы с аргументами командной строки

import System.Environment 
import Data.List 

main :: IO() 

main = do 
    args <- getArgs 
    progName <- getProgName 
    putStrLn "The arguments are:" 
    mapM putStrLn args 
    putStrLn "The program name is:" 
    putStrLn progName 

Я выполнение кода, вызвав главную функцию с моими аргументами:

main argument arguments "more arguements" 

Однако я получаю ошибку компилятора:

<interactive>:33:6: Not in scope: ‘argument’ 
<interactive>:33:15: Not in scope: ‘arguments’ 

Есть ли проблема с тем, как я называю свою функцию аргументами?

+1

вы вызываете это в GHCi? – Carsten

+0

Да, я называю это в GHCi. –

+0

хорошо Zeta был быстрее;) – Carsten

ответ

9

Вы должны использовать :main, если хотите имитировать аргументы командной строки. Только main выполняет только ваше действие IO(), но на самом деле не создает аргументы. Для всех, что знает GHCi, main необязательно должен быть IO(), это может быть Int -> Int -> IO().

Однако, если вы используете :main, GHC будет использовать main так же, как он будет вызываться во время вызова runhaskell, например. с интерпретацией следующих параметров в качестве аргументов командной строки.

В качестве альтернативы, вы можете использовать withArgs из System.Environment:

ghci> withArgs ["argument", "arguments", "more arguments"] main 
+0

Это совершенно разумно. Спасибо за объяснение, Зета! –

Смежные вопросы