Я пишу небольшой сценарий оболочки на 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
Я хотел бы знать. Мне очень понравились эти два модуля.
Спасибо!