这是我的职责
getDateFromUser :: IO (Either UserError Day)
getDateFromUser = do
Prelude.putStrLn "Пожалуйста, укажите дату для прогноза в формате ГГГГ-ММ-ДД:"
currentTime <- getCurrentTime
date <- Prelude.getLine
let retrievedDate = utctDay currentTime
dayFromUser = parseTimeM True defaultTimeLocale "%Y-%-m-%-d" date :: Maybe Day
case dayFromUser of
Nothing -> Nothing
Just validDay -> do
let differenceInDays = diffDays validDay retrievedDate
if differenceInDays >= 0 && differenceInDays <= 16
then return $ Right validDay
else return $ Left InvalidDate
和此错误消息
期望的类型:IO(每个UserError日) 实际类型:可能(每个UserError日)
我该如何解决?
答案 0 :(得分:5)
罪魁祸首是Nothing -> Nothing
,其中第一个Nothing
是Maybe Day
,第二个是Maybe (Either UserError Day)
。
你想要
Nothing -> return $ Left InvalidDate
(或其他一些UserError
)。