Ion*_*tan 7 io conditional haskell coding-style command-line-arguments
我在Haskell中编写了一个小shell脚本,可以使用可选参数.但是,如果参数不存在,我想从stdin中获取一行来请求一个值.
在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
Run Code Online (Sandbox Code Playgroud)
哦,如果有办法用某些东西来做,Control.Applicative
或者Control.Arrow
我想知道.我对这两个模块非常热衷.
谢谢!
main :: IO ()
main = do args <- getArgs
name <- lowerCase <$> case args of
[arg] -> return arg
_ -> readPrompt "Gimme arg: "
putStrLn name
Run Code Online (Sandbox Code Playgroud)