2012-10-09 61 views
2

如何將下面的示例轉換爲使用外部文件而不是嵌入式懶文本準引號?使用莎士比亞文本和外部文件

{-# LANGUAGE QuasiQuotes, OverloadedStrings #-} 
import Text.Shakespeare.Text 
import qualified Data.Text.Lazy.IO as TLIO 
import Data.Text (Text) 
import Control.Monad (forM_) 

data Item = Item 
    { itemName :: Text 
    , itemQty :: Int 
    } 

items :: [Item] 
items = 
    [ Item "apples" 5 
    , Item "bananas" 10 
    ] 

main :: IO() 
main = forM_ items $ \item -> TLIO.putStrLn 
    [lt|You have #{show $ itemQty item} #{itemName item}.|] 

這是從yesod online book

+1

從你的鏈接頁面,它看起來像耶索德用途[此功能哈姆雷特(http://hackage.haskell.org/packages/archive/hamlet/1.1.1/doc/html/src/Text-Hamlet。 html#hamletFileWithSettings)從文件加載模板。這看起來很簡單,建立在它自己的使用應該相當簡單。 – bisserlis

回答

2

您可以使用textFile函數,沿着$(textFile "some-file")的行。

+2

謝謝,但我如何獲得Language.Haskell.TH.Syntax.Q某些字符串類型? –

+0

同樣的問題。我可以通過textFile來加載文件,但GHC對結果Q Exp不滿意。 –

+1

使用Data.Text.Internal.Builder.toLazyText和傳遞一個空(「」 ::文)由文本文件創建的EXP值,我能夠獲得一個懶惰的文字,我可以在我的代碼中使用。 請參閱:https://hackage.haskell.org/package/text-1.1.0.1/docs/Data-Text-Internal-Builder.html 我會反對依靠內部模塊,雖然。必須有更好的解決方案,否則,應該爲此創建一個小型圖書館。菲利佩萊薩開始這樣的電子郵件。 –