Я пишу небольшую программу с действиями ввода-вывода в Haskell
здесь
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 = String
на type Value = IO String
и использовать карту Map String (IO String)
?
И если у меня есть Map String (IO String)
как я могу обработать эту карту, как я могу получить любое значение, зависящее от данных в IO
контейнере (может быть, какая-то функция func :: (a->b) -> IO a -> b
)
Например, есть ли способ сравнить IO String
с clear String
?
Если бы у меня была функция func
, я бы написал
map :: Map String (IO String)
...
func (==) (map ! "key")
Какова стратегия работы с IO
значениями?