次のような通常のディレクトリ構造を持つ単純な Yesod プロジェクトがあります。
./Main.hs
./Foundation.hs
./Handler/Home.hs
./Handler/... etc
./config/routes
./templates/home.hamlet
./templates/default-layout.hamlet
./templates/default-layout-wrapper.hamlet
./templates/default-layout-wrapper.cassius
...
Main.hs通常、プログラムはappディレクトリ の下にあるスタックでこのプロジェクトをビルドしようとしています。
すべての Yesod 構造をappdir の下に配置しようとしました ( appdir は.上記です)。
プロジェクトの cabal ファイルは次のようになります。
executable proj-web01-exe
hs-source-dirs: app
main-is: Main.hs
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base, bytestring, split, filepath
, stm, data-default, text, conduit, conduit-extra
, containers, resourcet, blaze-html, blaze-markup
, shakespeare, yesod, yesod-static
, proj-web01
default-language: Haskell2010
しようとするとstack build、次のエラー メッセージが表示されます。
[1 of 6] Compiling Foundation ( app/Foundation.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/proj-web01-exe/proj-web01-exe-tmp/Foundation.o )
/home/me/proj-web01/app/Foundation.hs:46:35:
Exception when trying to run compile-time code:
Called widgetFileNoReload on "default-layout", but no templates were found.
Code: widgetFileNoReload (def) "default-layout"
In the splice: $(widgetFileNoReload def "default-layout")
-- While building package proj-web01-0.1.0.0 using:
/home/me/.stack/setup-exe-cache/x86_64-linux/setup-Simple-Cabal-1.22.5.0-ghc-7.10.3 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.5.0 build lib:proj-web01 exe:proj-web01-exe --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
widgetFileNoReloadapp/templatesディレクトリにある「default-layout」ファイルの場所がわかりません。
私の質問: cabal ファイルを別の方法で作成する必要がありますか、それともテンプレート、Handler... フォルダーを別の場所 (src など) に配置する必要がありますか? スタックを使用する場合、最も自然なディレクトリ構造は何ですか? または、通常の Yesod ディレクトリ構造に合わせてスタック パラメータ (cabal および yaml ファイル) を設定する方法を教えてください。