2011-11-20 12 views
6

Sto scrivendo un gestore getSitemapR che utilizza yesod-sitemap per generare un file sitemap. Il problema che sto avendo è la conversione di un String in UTCTime come definito nel Data.Time.Clock. La documentazione di eglefino dice che UTCTime è un'istanza della classe di caratteri Read, quindi è quello che sto provando. Ecco il mio codice.conversione di una stringa di digitare UTCTime

module Handler.Root where 

import Import 
import Yesod.Goodies.Gravatar 
import Data.Time.Format 
import System.Locale 
-- This is a handler function for the GET request method on the RootR 
-- resource pattern. All of your resource patterns are defined in 
-- config/routes 
-- 
-- The majority of the code you will write in Yesod lives in these handler 
-- functions. You can spread them across multiple files if you are so 
-- inclined, or create a single monolithic file. 
getRootR :: Handler RepHtml 
getRootR = do 
    defaultLayout $ do 
     h2id <- lift newIdent 
     setTitle "Cloudrr homepage" 
     $(widgetFile "homepage") 

gravatar :: Text -> String 
gravatar email = 
    gravatarImg email go 
    where 
    go = GravatarOptions { 
     gSize = Just (Size 140) 
     , gDefault = Just (Identicon) 
     , gForceDefault = ForceDefault False 
     , gRating = Just (PG) 
     } 

getSitemapR :: Handler RepXml 
getSitemapR = do 
    sitemap [smo RootR] 
    where 
    smo = SitemapUrl SitemapR{ 
     sitemapLoc = "http://www.cloudrr.me/sitemap.xml" 
     , sitemapLastMod = (read "2011-11-19 18:28:r52.607875 UTC")::UTCTime 
     , sitemapChangeFreq = Weekly 
     , priority = 0.7 
     } 

Ho guardato attraverso la mia copia di Real World Haskell nel capitolo 20 sulla programmazione di sistemi, ma non copre UTCTime nella sua esempi di codice, ho cercato di Google con il termine 'Haskell " Converti una stringa in UTCTime "" senza risultati. Ho trovato il seguente Thread nella mailing list Haskell-caffè che non funziona perché SitemapLastMod non ci vuole un Maybe UTCTime. Penso che stia facendo un errore davvero stupido qui, ma non sono sicuro, qualcuno potrebbe per favore indicarmi la giusta direzione?

Grazie per il vostro tempo e considerazione.

+2

Stai usando 'read' e si blocca o il codice non viene compilato? Puoi chiaramente indicare dove sei rimasto bloccato? – Tarrasch

risposta

7
, sitemapLastMod = (read "2011-11-19 18:28:r52.607875 UTC")::UTCTime 

La minuscola r non dovrebbe essere lì. Prova

, sitemapLastMod = (read "2011-11-19 18:28:52.607875 UTC")::UTCTime 
Problemi correlati