无法将类型“可能”与“ IO”匹配

时间:2018-08-08 09:51:28

标签: haskell

这是我的职责

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日)

我该如何解决?

1 个答案:

答案 0 :(得分:5)

罪魁祸首是Nothing -> Nothing,其中第一个NothingMaybe Day,第二个是Maybe (Either UserError Day)

你想要

Nothing -> return $ Left InvalidDate

(或其他一些UserError)。