首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈斯克尔·努布: QuasiQuotes OverloadedStrings in Yesod不工作吗?

哈斯克尔·努布: QuasiQuotes OverloadedStrings in Yesod不工作吗?
EN

Stack Overflow用户
提问于 2015-07-02 22:25:36
回答 1查看 175关注 0票数 1

我不知道为什么我不能让这个工作..。

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

错误:

代码语言:javascript
复制
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))

代码:

代码语言:javascript
复制
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文件中也有这样的内容:

代码语言:javascript
复制
extensions: TemplateHaskell
            QuasiQuotes
            OverloadedStrings
            NoImplicitPrelude
            CPP
            MultiParamTypeClasses
            TypeFamilies
            GADTs
            GeneralizedNewtypeDeriving
            FlexibleContexts
            EmptyDataDecls
            NoMonomorphismRestriction
            DeriveDataTypeable
            ViewPatterns
            TupleSections
            RecordWildCards
            TypeSynonymInstances
            FlexibleInstances
            DeriveGeneric

知道为什么会出现字符串/文本转换错误吗?提前感谢!禤浩焯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 00:10:34

putStrLn从ClassyPrelude接收的是文本,而不是字符串。最简单的解决方案是将Renderer导入更改为模块的文本版本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31195652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档