2011-11-20 142 views
6

我正在编写一个getSitemapR处理程序,它使用yesod-sitemap生成站点地图文件。我遇到的问题是将转换为UTCTime,如Data.Time.Clock中所定义。 haddock文档说,UTCTime是类型类型Read的一个实例,所以这就是我正在尝试的。这是我的代码。将字符串转换为类型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 
     } 

我已经在系统编程第20章通过我真实世界哈斯克尔的副本看了,但不包括UTCTime在它的代码示例,我已经搜查谷歌与“哈斯克尔术语“将字符串转换为UTCTime“',不带结果。我在haskell-cafe邮件列表中找到了以下Thread,这将不起作用,因为SitemapLastMod不需要Maybe UTCTime。我认为我在这里犯了一个非常愚蠢的错误,但我不确定,有人能请我指出正确的方向吗?

谢谢你的时间和考虑。

+2

你使用'read',它只是崩溃,或将代码不编译?你能清楚地说明你卡在哪里吗? – Tarrasch

回答

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

小写r不应该在那里。尝试

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