gpt4 book ai didi

haskell - 在haskell中处理IO值

转载 作者:行者123 更新时间:2023-12-02 04:09:38 25 4
gpt4 key购买 nike

我正在用 Haskell 编写一个带有 IO 操作的小程序这是

module StackQuestion where

import Data.Map (Map, insert, fromList)

type Name = String
type Value = String

readValue :: Name -> IO String
readValue name = do putStrLn name
value <- getLine
return value

addPair :: Name -> Value -> Map Name Value -> Map Name Value
addPair = insert

names = map show [1..5]
values = map (\char -> [char]) ['a'..'d']
initialMap = fromList (zip names values)

正如你所看到的,我有一些带有值的初始映射,以及向映射添加一对的函数,以及读取值的函数。

如何获得清晰的String值来自 readValue并将其传递给另一个函数?

或者我应该改变type Value = Stringtype Value = IO String并使用 map Map String (IO String)

如果我有Map String (IO String)我如何处理这张 map ,如何根据IO中的数据获得任何值容器(也许是某个函数 func :: (a->b) -> IO a -> b )例如有什么方法可以比较 IO String清晰 String

如果我有函数func我本来会写

map :: Map String (IO String)
...
func (==) (map ! "key")

IO合作的策略是什么?值(value)观?

最佳答案

How I can get a clear String value from readValue and pass it to another function?

你不能;您必须在 IO monad 中操作 readValue 的结果。

{- read value for name and store both in map -}
readAndStore :: Name -> Map Name Value -> IO (Map Name Value)
readAndStore name m = do value <- readValue name
return $ insert name value m

return 函数获取 insert 的结果并将其整齐地放回到 IO monad 中。此代码举例说明了使用 IO 内的普通函数操作值的一般模式。

Or should I change type Value = String to type Value = IO String

没有;考虑一下这意味着什么。 IO String 表示具有 String 类型结果的可能副作用 (IO) 的计算。您会将名称映射到计算。 (这是可能的,但这不是你的意思。)

上面显示的示例使用 IO( map 名称值) 来代替;即,IO monad 中具有 Map 类型结果的计算。

关于haskell - 在haskell中处理IO值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6876540/

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