Как я могу использовать чтение для строки, которая не заключена в двойные кавычки?

Я читаю значения из 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 оставался полиморфным?

5
задан Don Stewart 14 May 2011 в 20:44
поделиться