2012-10-09 5 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

연결된 페이지에서 Yesod가 [이 햄릿 기능] (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를 사용하고 textFile에 의해 생성 된 Exp 값에 빈 ("":: Text)을 전달하면 코드에서 사용할 수있는 느린 텍스트를 얻을 수있었습니다. 참조 : https://hackage.haskell.org/package/text-1.1.0.1/docs/Data-Text-Internal-Builder.html 내부 모듈을 사용하지 않도록주의하십시오. 더 나은 해결책이 있어야합니다. 그렇지 않다면이 목적을 위해 작은 라이브러리를 만들어야합니다. Felipe Lessa는 이메일을 위해 이렇게 시작했습니다. –

관련 문제