Haskell конвертировать ByteString в UTC время - PullRequest
1 голос
/ 02 мая 2010

Я пытался сделать функцию в Haskell, чтобы взять ByteString, которая является datetime, и преобразовать ее в время UTC с учетом часового пояса из исходной кодировки. Я очень новичок в Хаскеле, поэтому я могу совершить очень серьезную ошибку.

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 }

1 Ответ

5 голосов
/ 02 мая 2010

Во-первых, -5 должен быть в скобках, иначе он анализируется как попытка вычесть 5 из функции hoursToTimeZone, которая объясняет ошибку типа.

Кроме того, все функции здесь чистые, поэтому они не должны быть в монаде do{...}. Просто используйте выражение let, если вы хотите явно назвать шаги.

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