Я пишу небольшой скрипт на Haskell, который может принимать необязательный аргумент.Однако, если аргумент отсутствует, я хотел бы получить строку из 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
О, и если есть способ сделать это с чем-то из Control.Applicative
или Control.Arrow
, я бы хотел знать.Я очень заинтересовался этими двумя модулями.
Спасибо!