2017-10-20 1 views
1

저는 Yesod를 사용하여 간단한 응용 프로그램을 작성 중이며 외부 파일을 가져 오는 데 어려움을 겪고 있습니다. 여기 내 코드입니다 : 내가 whamletFilehamletFile를 교체 할 경우hamletFile, luciusFile, juliusFile 변수가 범위 내에 없습니다

{-# LANGUAGE OverloadedStrings  #-} 
{-# LANGUAGE QuasiQuotes   #-} 
{-# LANGUAGE TemplateHaskell  #-} 
{-# LANGUAGE TypeFamilies   #-} 
import   Yesod 

data GomokuServer = GomokuServer 

mkYesod "GomokuServer" [parseRoutes| 
/HomeR GET 
|] 

instance Yesod GomokuServer 

getHomeR :: Handler Html 
getHomeR = defaultLayout $ do 
     $(hamletFile "./src/templates/home.hamlet") 
     $(luciusFile "./src/templates/home.lucius") 

main :: IO() 
main = warp 3000 GomokuServer 

그것은 내가 quasiquotes을 사용할 때 좋은 작품, 또는하지만 hamletFile 또는 luciusFile을 찾을 수 없기 때문에 그렇지 않으면 컴파일되지 않습니다. 나는 Yesod 버전 1.4를 사용하고 있으며, 핵심 메소드 인 Yesod 패키지로 가져온 메소드를 생각했습니다. 그렇지 않습니까?

답변

2

whamletFile을 사용하지 않으시겠습니까? 대부분의 경우 위젯을 원합니다.

hamletFile는 다시 내보낼 수 없습니다. 당신이 정말로 그것을 필요하면

λ import Yesod 
λ :t hamletFile 

<interactive>:1:1: error: 
    • Variable not in scope: hamletFile 
    • Perhaps you meant ‘whamletFile’ (imported from Yesod) 

, 당신은 Text.Hamlet에서 그것을에서 가져올 수 있습니다.

FWIW는 Yesod scaffolding 함수를

widgetFile :: String -> Q Exp 
widgetFile = (if appReloadTemplates compileTimeAppSettings 
       then widgetFileReload 
       else widgetFileNoReload) 
       widgetFileSettings 

을 정의 그리고 난 그냥 "홈페이지"에 대한 파일을 어디서나 기본적으로 작은 마을, 루시우스에서 제공 $(Settings.widgetFile "homepage")처럼이 사용하고 카시우스. Overriding-widgetFile on the Yesod wiki

+0

'whamletFile'을 사용하여 외부'.lucius' 파일을 가져올 수 있습니까? 나는'.hamlet' 파일에서만 작동한다는 인상 아래에있었습니다. Text.Hamlet을 사용하여 가져 오기를 종료했습니다. –

+0

'whamletFile'을 사용하여 lucius 파일을 가져올 수는 없지만, 3 개의 hamlet, lucius 및 cassius 파일을 모두 가져 오는'widgetFile' 함수를 사용할 수 있습니다. – Ben

+0

그러나'widgetFile'은 핵심 yesod 라이브러리에 포함되어 있지 않습니까? 나는 의존성 목록에 yesod-scaffold를 추가해야 할 것입니다. 과도한 것처럼 보이는 것, 그것이 제가 사용할 유일한 기능이라고 생각합니다. –

관련 문제