【问题标题】:How to convert (Integer, Int, Int ) to Day. Couldn't match expected type ‘Day’ with actual type ‘(Integer, Int, Int)’如何将 (Integer, Int, Int ) 转换为 Day。无法将预期类型“Day”与实际类型“(Integer,Int,Int)”匹配
【发布时间】:2018-06-03 13:57:44
【问题描述】:
main :: IO ()
main = do
  Prelude.putStrLn "Please,enter date YYYY-MM-DD"
  currentTime <- getCurrentTime
  date <- Prelude.getLine
  let sTime = show currentTime 
  let retrievedDate = toGregorian $ utctDay currentTime
  let forecastDay = parseTimeM True defaultTimeLocale "%Y-%-m-%-d" date :: Maybe Day
  let diifedDays = diffDays (fromJust forecastDay) retrievedDate
  if date >= show retrievedDate && diifedDays > 0 && diifedDays <= 16 
     then print date
     else print "Time Error!"

我需要将 retrievedDate (Integer,Int,Int) 转换为 Day。 任务是:从(forecastDay - retrievedDay)中减去 但我不能这样做,因为我需要将 retrievedDate 转换为 Day

错误信息: 无法匹配预期类型“日” 实际类型为'(Integer, Int, Int)'

42 | let diifedDays = diffDays (fromJust forecastDay) 检索日期

【问题讨论】:

  • @WillemVanOnsem type Day from Data.Time 我需要转换 (Integer,Int,Int) --->>>> Day

标签: haskell haskell-stack


【解决方案1】:

你需要修复你的错误只是删除toGregorian,它会很好地进行类型检查。

不过,您可能想要处理您的逻辑。

【讨论】:

    【解决方案2】:

    实际上你已经有了一个Day 对象,但是通过使用toGregorian,你可以将它转换成一个三元组(Integer, Int, Int)(根据公历日历的年、月、日) .所以你实际上可以放弃toGregorian 函数调用:

    main :: IO ()
    main = do
      Prelude.putStrLn "Please,enter date YYYY-MM-DD"
      currentTime <- getCurrentTime
      date <- Prelude.getLine
      let sTime = show currentTime 
      let retrievedDate = utctDay currentTime
      let forecastDay = parseTimeM True defaultTimeLocale "%Y-%-m-%-d" date :: Maybe Day
      let diifedDays = diffDays (fromJust forecastDay) retrievedDate
      if date >= show retrievedDate && diifedDays > 0 && diifedDays <= 16 
         then print date
         else print "Time Error!"

    如果您需要将三元组转换回来,您可以使用fromGregorian :: Integer -&gt; Int -&gt; Int -&gt; Day 函数。对于三元组(Integer, Int, Int),我们可以这样使用:

    \(y, m, d) -> fromGregorian y m d
    

    此外,您的代码给人留下了相当混乱的印象,其中包含大量 let 语句、shows 等。所以我真的建议您清理它。

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多