Я пытаюсь сравнить членов кортежа (дата) кортежа ввода-вывода с обычным кортежем.
d1 ->(Integer, Int, Int)
и d2 -> IO (Integer, Int, Int)
,
Можно ли сравнить эти два кортежа?Я пробовал что-то вроде этого:
import Data.Time.Clock
import Data.Time.Calendar
import Data.Time.LocalTime
-- helper functions for tuples
x_fst (x,_,_) = x
x_snd (_,x,_) = x
x_trd (_,_,x) = x
getDate :: IO (Integer, Int, Int)
getDate = do
now <- getCurrentTime
tiz <- getCurrentTimeZone
let zoneNow = utcToLocalTime tiz now
let date@(year, month, day) = toGeorgian $ localDay zoneNow
return $ date -- here I will return an IO tuple -> IO (Integer, Int, Int)
compareDates :: a -> IO (Integer, Int, Int) -> IO Bool
compareDates d1 d2 = do
let year1 = x_fst d1
let year2 = x_fst d2
let month1 = x_snd d1
let month2 = x_snd d2
let day1 = x_trd d1
let day2 = x_trd d2
return $ (year1 == year2 && month1 == month2 && day1 == day2)
Но я получаю сообщение, что не могу сравнить кортеж ввода-вывода с обычным кортежем:
Couldn't match expected type `(Integer, Integer, Integer)`
with actual type `IO (Integer, Int, Int)`
In the second argument of `compareDates`, namely `date`
Есть ли способ обойтиЭто?Буду признателен за любую помощь.
Спасибо.