2017-10-20 8 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を追加しなければならないでしょう。これは残酷なように思えますが、これは私が使用する唯一の機能だと考えています。 –

関連する問題