Страница wai-handler-devel Hackage говорит, что она должна быть вызвана из командной строки следующим образом:
$ wai-handler-devel <port> My.App.Module myApp
и тип вашего приложения должен выглядеть следующим образом:
myApp :: (Application -> IO ()) -> IO ()
В этом случае вы должны определить myApp
следующим образом:
myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler app
хотя вы можете полностью встроить app
:
myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler $ \_ -> return $ responseLBS
status200
[("Content-Type", "text/plain")]
"Hello, World!"
Тип такой, чтобы вы могли выполнять инициализацию при запуске и т.п. в IO
. Я предлагаю прочитать примеры SmallApp и FullApp из git-репозитория wai-handler-devel; последний особенно полезен, так как он имеет отладочный вывод, показывающий поток кода во время перезагрузки, и показывает, как интегрировать длительное соединение с базой данных.
Сценарий запуска для примера FullApp также показывает, как программно использовать wai-handler-devel, включая ручное указание зависимостей шаблона Гамлета (который wai-handler-devel
инструмент командной строки определяет автоматически ).
После этого вы сможете переписать ваш main
следующим образом:
main :: IO ()
main = do
putStrLn $ "http://localhost:8080/"
myApp (run 8080)
Конечно, вы можете также легко передать функцию run
из wai-handler-fastcgi , wai-handler-scgi или даже wai-handler- WebKit .