При компиляции следующего кода Yesod
/Haskell
( Main.hs )
data App = App
mkYesod "App" [parseRoutes|
/from/php/to/dhscanner/ast FromPhpR POST
/from/py/to/dhscanner/ast FromPyR POST
/from/rb/to/dhscanner/ast FromRbR POST
/from/js/to/dhscanner/ast FromJsR POST
/healthcheck HealthcheckR GET
|]
instance Yesod App
Я получаю следующее странное предупреждение1:
src/Main.hs:40:1: warning: [GHC-40910] [-Wunused-top-binds]
Defined but not used: type constructor or class ‘Widget’
|
40 | mkYesod "App" [parseRoutes|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
src/Main.hs:40:1: warning: [GHC-40910] [-Wunused-top-binds]
Defined but not used: ‘resourcesApp’
|
40 | mkYesod "App" [parseRoutes|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
День документов, когда:
[ ... ] предупреждает, если привязка вводит в область видимости неиспользуемую переменную, за исключением случаев, когда имя переменной начинается с подчеркивания
Но как пользователь Yesod
я не могу управлять определенными там переменными (верно?)
1 все работает нормально, я просто не понимаю предупреждения
mkYesod
— это функция TemplateHaskell, которая определяет символы в вызываемом вами модуле. Они обрабатываются не иначе, чем символы, которые вы определили «рукой».
Если предупреждение вас беспокоит, вы можете просто экспортировать Widget
. Если вы используете shakespeare
материал Yesod для создания шаблонов, вы, вероятно, все равно захотите это сделать, поскольку ваше приложение состоит из более чем одного файла.
@OrenIshShalom, если тебя это действительно так беспокоит, ты можешь сделать что-нибудь вроде «фальшивки», используя это, например. main = let _ = undefined::Widget in (actual main)
или вы можете поставить {-# OPTIONS_GHC -Wno-unused-top-binds #-}
, чтобы просто отключить предупреждение для всего файла.
Если мне нужна только конечная точка, которая манипулирует файлами json (вообще не генерирует HTML), то мне действительно не нужен
Widget
, верно? Что мне делать в этом случае?