【发布时间】:2011-04-21 10:40:16
【问题描述】:
我正在用 Haskell 编写一个小 shell 脚本,它可以接受一个可选参数。但是,如果参数不存在,我想从标准输入中获取一行来请求一个值。
在 Haskell 中执行此操作的惯用方式是什么?
#!/usr/bin/env runhaskell
import Control.Applicative ((<$>))
import Data.Char (toLower)
import IO (hFlush, stdout)
import System.Environment (getArgs)
main :: IO ()
main = do args <- getArgs
-- here should be some sort of branching logic that reads
-- the prompt unless `length args == 1`
name <- lowerCase <$> readPrompt "Gimme arg: "
putStrLn name
lowerCase = map toLower
flushString :: String -> IO ()
flushString s = putStr s >> hFlush stdout
readPrompt :: String -> IO String
readPrompt prompt = flushString prompt >> getLine
哦,如果有办法通过Control.Applicative 或Control.Arrow 来实现,我想知道。我对这两个模块非常感兴趣。
谢谢!
【问题讨论】:
标签: haskell coding-style io conditional command-line-arguments