在if中执行readLine

Dan*_*ter 3 io haskell

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

$ my_prog add item_name
Adding... done

$ my_prog add
Enter item name: item_name
Adding... done
Run Code Online (Sandbox Code Playgroud)

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

add args = do
    let id = if length args > 0
        then head args
        else input where
            input <- readLine
    -- Do stuff with id
    putStrLn id
Run Code Online (Sandbox Code Playgroud)

哪个无法解析<-.

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

Kot*_*lar 8

你试图在do里面使用-notation if,这将无法工作(此外,由于整体if不在IOmonad中,因此不会进行类型检查).

add args = do
    id <- if length args > 0
              then return $ head args
              else readLine
    putStrLn id
Run Code Online (Sandbox Code Playgroud)