使用maybeRead.该函数是包含在Haskell库中的候选函数,但尚未实现.所以包括它的代码.这是一个完整的解决方案:
import Data.Time import Data.Maybe (listToMaybe) import System.IO (hSetBuffering, BufferMode(NoBuffering), stdout)main = do hSetBuffering stdout NoBuffering putStr "Enter an Int: " maybeInt <- fmap maybeRead getLine :: IO (Maybe Int) maybe (putStrLn "That's not an Int!") (putStrLn . ("The Int is " ++) . show) maybeInt putStr "Enter a date: " maybeDate <- fmap maybeRead getLine :: IO (Maybe Day) maybe (putStrLn "That's not a date!") (putStrLn . ("The date is " ++) . show) maybeDate
maybeRead :: Read a => String -> Maybe a maybeRead = fmap fst . listToMaybe . filter (null . snd) . reads