gpt4 book ai didi

haskell - 在 Haskell 中有条件地处理 IO 的惯用方法

转载 作者:行者123 更新时间:2023-12-04 10:57:21 25 4
gpt4 key购买 nike

我正在用 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我想知道。我对这两个模块非常感兴趣。

谢谢!

最佳答案

main :: IO ()
main = do args <- getArgs
name <- lowerCase <$> case args of
[arg] -> return arg
_ -> readPrompt "Gimme arg: "
putStrLn name

关于haskell - 在 Haskell 中有条件地处理 IO 的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com