2

我试图使用 GHCi 和:set argsfor main,如下所示:

:set args "(\x -> x )"

GHCI 抱怨:

Couldn't read "\"(\\x -> x )\""as String

我不明白为什么不能将其视为字符串。我可以不用引号:

:set args (\x -> x )

但显然,这是不正确的,它会被解释为 4 个参数而不是 1 个,如下面的main函数所示。

import System.Environment

main = do
  args <- getArgs
  putStrLn $ show $ length args

有关如何将其传递给 GHCi 的任何指示?(我可以从命令行将它传递给已编译的 ghc 代码。)

谢谢,

4

1 回答 1

6

尝试这个:

λ> :set args "(\\x -> x )"
λ> getArgs
["(\\x -> x )"]

请注意,ghci 参数解析与 shell 参数解析不同。如果您使用字符串,它将被解析为 Haskell 字符串。

另一种选择是使用withArgs自己:

λ> withArgs ["(\\x -> x )"] (getArgs >>= mapM_ putStrLn)
(\x -> x )
于 2013-07-22T23:29:21.653 回答