У меня есть простой Есод проект с обычной структурой каталогов, как это:Структуры каталогов Йесод и Stack
./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 под линией app
(app
dir - это .
).
междусобойчик файл проекта выглядит следующим образом:
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
widgetFileNoReload
не знает, где найти «по умолчанию -layout ", которые находятся в каталоге app/templates
.
Мой вопрос: Должен ли я писать файл cabal по-другому или разместить шаблоны, Handler ... папки в другом месте (например, в src)? Какова наиболее естественная структура каталогов при использовании стека? Или, альтернативно, как настроить параметры стека (файлы cabal и yaml), чтобы они соответствовали обычной структуре каталогов Yesod?