Haskell 如何将(整数、整数、整数)转换为天。不能';t匹配预期类型‘;第’天;实际类型为‘;(整数,整数,整数)和#x2019; main::IO() main=do Prelude.putStrLn“请输入日期YYYY-MM-DD” currentTime 0&&diifedDays

Haskell 如何将(整数、整数、整数)转换为天。不能';t匹配预期类型‘;第’天;实际类型为‘;(整数,整数,整数)和#x2019; main::IO() main=do Prelude.putStrLn“请输入日期YYYY-MM-DD” currentTime 0&&diifedDays,haskell,haskell-stack,Haskell,Haskell Stack,实际上您已经得到了一个Day对象,但是通过使用toGregorian,您可以将它转换为三个(整数、整数、整数)(根据公历的年、月、日)。因此,您实际上只需删除toGregorian函数调用: main :: IO () main = do Prelude.putStrLn "Please,enter date YYYY-MM-DD" currentTime <- getCurrentTime date <- Prelude.getLine let sTime = sh

实际上您已经得到了一个
Day
对象,但是通过使用
toGregorian
,您可以将它转换为三个
(整数、整数、整数)
(根据公历的年、月、日)。因此,您实际上只需删除
toGregorian
函数调用:

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!"

除此之外,你的代码会给人一种相当混乱的印象,有很多
let
语句,
show
s等等。所以我真的建议你把它清理干净。

事实上你已经得到了一个
Day
对象,但是通过使用
toGregorian
,你把它转换成一个三元组
(整数,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 = 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!"

除此之外,你的代码给人留下了一个相当混乱的印象,有很多
let
语句,
show
s等等。所以我真的建议你把它清理干净。

你需要纠正错误的是简单地删除
toGregorian
,它会很好地进行打字检查


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

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


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

@WillemVanOnsem从数据中键入Day。我需要转换的时间(Integer,Int,Int)--->>Day@WillemVanOnsem从数据中键入天。我需要转换的时间(整数、整数、整数)--->>>天
\(y, m, d) -> fromGregorian y m d