3

我在 Haskell 中编写了一个小型命令行实用程序,它应该接受带有可选命令行参数的命令 - 但如果该参数不存在,则应提示用户输入它*。例如:

$ my_prog add item_name
Adding... done

$ my_prog add
Enter item name: item_name
Adding... done

我最初的尝试看起来像这样:

add args = do
    let id = if length args > 0
        then head args
        else input where
            input <- readLine
    -- Do stuff with id
    putStrLn id

无法在<-.

*我已经决定这是一个愚蠢的想法,但我想我还是会问这个问题。

4

1 回答 1

8

您正在尝试在do内部使用 -notation if,这将不起作用(此外,由于整个ifIOmonad 之外,因此不会进行类型检查)。

add args = do
    id <- if length args > 0
              then return $ head args
              else readLine
    putStrLn id
于 2013-03-24T08:00:50.483 回答