1

我一直在尝试在 Haskell 中创建一个函数来获取一个日期时间的 ByteString,并将其转换为 UTC 时间,同时考虑到原始编码的时区。我对 Haskell 很陌生,所以我可能犯了一个非常基本的错误。

convertStringToUtc s =
  do
    estTimeZone <- hoursToTimeZone -5
    time <- read $ B.unpack(s)
    localTimeToUTC estTimeZone time

我得到的错误是:

Couldn't match expected type `Int -> b'
       against inferred type `UTCTime'
In the expression: localTimeToUTC estTimeZone time
In the expression:
    do { estTimeZone <- hoursToTimeZone - 5;
         time <- read $ B.unpack (s);
         localTimeToUTC estTimeZone time }
4

1 回答 1

5

首先,-5 需要在括号中,否则它被解析为试图从hoursToTimeZone函数中减去 5,这解释了类型错误。

此外,这里的所有函数都是纯函数,因此它们不需要位于 monadicdo{...}中。let如果您想明确命名这些步骤,只需使用表达式。

convertStringToUtc s = 
    let estTimeZone = hoursToTimeZone (-5)
        time = read $ B.unpack s
    in  localTimeToUTC estTimeZone time
于 2010-05-02T01:05:07.927 回答