Я читаю значения из in с консоли используя readLn
.
Я хотел бы написать функцию:
requestValue :: String -> IO a
requestValue s = do
putStrLn $ "Please enter a new value for " ++ s
readLn
Тогда я смогу сделать, например,
changeAge :: Person -> IO Person
changeAge p = do
age' <- requestValue "age"
return $ p { age = age'}
changeName :: Person -> IO Person
changeName p = do
name' <- requestValue "name"
return $ p { name = name'}
Проблема, с которой я столкнулся, заключается в том, что экземпляр чтения String похоже, требует, чтобы строка была в кавычках. Я не хочу вводить «Fred»
в консоль, чтобы изменить имя, когда я действительно хочу ввести только Fred
.
Есть ли простой способ сделать это, чтобы requestValue
оставался полиморфным?