Haskell 新手:Yesod 中的 QuasiQuotes OverloadedStrings 不起作用?

Haskell Noob: QuasiQuotes OverloadedStrings in Yesod not Working?

我不确定为什么我不能让它工作....

我的 hs 文件顶部有 QuasiQuotes 和 OverloadedStrings,在 main.hs、maindevel.hs 的顶部,也在我的 foo.cabal 文件中声明。

错误:

Couldn't match type ‘[Char]’ with ‘Text’
    Expected type: Text
    Actual type: String
In the second argument of ‘($)’, namely
    ‘renderHtml (GHC.Base.id (toHtml y))’
In the expression:
    putStrLn $ renderHtml (GHC.Base.id (toHtml y))

代码:

module Widgets.MainWidgets where
{-# LANGUAGE GADTs #-}
{-# LANGUAGE QuasiQuotes #-}                      
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings, TypeSynonymInstances, FlexibleInstances #-}
import Import

import Text.Hamlet (shamlet)
import Text.Blaze.Html.Renderer.String (renderHtml)
import Data.Char (toLower)
import Data.List (sort)
import qualified Data.Text    as T
import qualified Data.Text.IO as T

import ClassyPrelude
import Yesod
import Data.Time.Clock
import Data.Time.Calendar
import Data.Time.LocalTime
import Data.Time.Format

getCurrYear :: String
getCurrYear = formatTime defaultTimeLocale "%y" getCurrentTime

getYear :: IO ()
getYear = putStrLn $ renderHtml
    [shamlet|#{y}|]
        where y = getCurrYear

我的 foo.cabal 文件中也有这个:

extensions: TemplateHaskell
            QuasiQuotes
            OverloadedStrings
            NoImplicitPrelude
            CPP
            MultiParamTypeClasses
            TypeFamilies
            GADTs
            GeneralizedNewtypeDeriving
            FlexibleContexts
            EmptyDataDecls
            NoMonomorphismRestriction
            DeriveDataTypeable
            ViewPatterns
            TupleSections
            RecordWildCards
            TypeSynonymInstances
            FlexibleInstances
            DeriveGeneric

知道为什么我会收到 String/Text 转换错误吗? 提前致谢! 阿德里安

ClassyPrelude 中的 putStrLn 采用文本,而不是字符串。最简单的解决方案是将渲染器导入更改为模块的文本版本。