如何使用GHCi:在包含函数的带引号的字符串上设置args

tin*_*lyx 2 haskell ghci command-line-arguments

我试图用GHCI并:set args进行main如下:

:set args "(\x -> x )"
Run Code Online (Sandbox Code Playgroud)

GHCi抱怨:

Couldn't read "\"(\\x -> x )\""as String
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这不能被视为一个字符串.我可以不用引号:

:set args (\x -> x )
Run Code Online (Sandbox Code Playgroud)

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

import System.Environment

main = do
  args <- getArgs
  putStrLn $ show $ length args
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

sha*_*haf 6

试试这个:

?> :set args "(\\x -> x )"
?> getArgs
["(\\x -> x )"]
Run Code Online (Sandbox Code Playgroud)

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

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

?> withArgs ["(\\x -> x )"] (getArgs >>= mapM_ putStrLn)
(\x -> x )
Run Code Online (Sandbox Code Playgroud)