withDevelAppPort to getApplicationDev, no more Dynamic

This commit is contained in:
Michael Snoyman 2012-01-23 21:57:59 +02:00
parent adecd25bc3
commit abd23e57df
4 changed files with 20 additions and 29 deletions

View File

@ -7,7 +7,7 @@ module Yesod.Default.Main
) where
import Yesod.Default.Config
import Yesod.Logger (Logger, defaultDevelopmentLogger, logString, flushLogger)
import Yesod.Logger (Logger, defaultDevelopmentLogger, logString)
import Network.Wai (Application)
import Network.Wai.Handler.Warp
(runSettings, defaultSettings, settingsPort, settingsHost)
@ -82,20 +82,15 @@ defaultRunner f app = do
-- | Run your development app using a custom environment type and loader
-- function
--
-- > withDevelAppPort :: Dynamic
-- > withDevelAppPort = toDyn $ defaultDevelApp customLoadAppConfig withMySite
--
defaultDevelApp
:: (Show env, Read env)
=> IO (AppConfig env extra) -- ^ A means to load your development @'AppConfig'@
-> (AppConfig env extra -> Logger -> IO Application) -- ^ Get your @Application@
-> ((Int, Application) -> IO ()) -> IO ()
defaultDevelApp load getApp f = do
-> IO (Int, Application)
defaultDevelApp load getApp = do
conf <- load
logger <- defaultDevelopmentLogger
let p = appPort conf
logString logger $ "Devel application launched, listening on port " ++ show p
app <- getApp conf logger
f (p, app)
flushLogger logger
return (p, app)

View File

@ -159,11 +159,9 @@ showPkgName = (\(D.PackageName n) -> n) . D.pkgName
develFile :: D.PackageId -> T.Text
develFile pid = [ST|
{-# LANGUAGE PackageImports #-}
import "#{showPkgName pid}" Application (withDevelAppPort)
import Data.Dynamic (fromDynamic)
import "#{showPkgName pid}" Application (getApplicationDev)
import Network.Wai.Handler.Warp
(runSettings, defaultSettings, settingsPort, settingsHost)
import Data.Maybe (fromJust)
import Control.Concurrent (forkIO)
import System.Directory (doesFileExist, removeFile)
import System.Exit (exitSuccess)
@ -171,13 +169,13 @@ import Control.Concurrent (threadDelay)
main :: IO ()
main = do
putStrLn "Starting devel application"
wdap <- (return . fromJust . fromDynamic) withDevelAppPort
forkIO . wdap $ \(port, app) -> runSettings defaultSettings
{ settingsPort = port
, settingsHost = "0.0.0.0"
} app
loop
putStrLn "Starting devel application"
(port, app) <- getApplicationDev
forkIO $ runSettings defaultSettings
{ settingsPort = port
, settingsHost = "0.0.0.0"
} app
loop
loop :: IO ()
loop = do

View File

@ -1,7 +1,7 @@
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Application
( getApplication
, withDevelAppPort
, getApplicationDev
) where
import Import
@ -11,7 +11,6 @@ import Yesod.Auth
import Yesod.Default.Config
import Yesod.Default.Main
import Yesod.Default.Handlers
import Data.Dynamic (Dynamic, toDyn)
#if DEVELOPMENT
import Yesod.Logger (Logger, logBS)
import Network.Wai.Middleware.RequestLogger (logHandleDev)
@ -55,9 +54,9 @@ getApplication conf logger = do
#endif
-- for yesod devel
withDevelAppPort :: Dynamic
withDevelAppPort =
toDyn $ defaultDevelApp loader getApplication
getApplicationDev :: IO (Int, Application)
getApplicationDev =
defaultDevelApp loader getApplication
where
loader = loadConfig (configSettings Development)
{ csParseExtra = parseExtra

View File

@ -1,7 +1,7 @@
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Application
( getApplication
, withDevelAppPort
, getApplicationDev
) where
import Import
@ -18,7 +18,6 @@ import Yesod.Logger (Logger, logBS, toProduction)
import Network.Wai.Middleware.RequestLogger (logHandle)
#endif
import Network.Wai (Application)
import Data.Dynamic (Dynamic, toDyn)
-- Import all relevant handler modules here.
import Handler.Root
@ -48,9 +47,9 @@ getApplication conf logger = do
#endif
-- for yesod devel
withDevelAppPort :: Dynamic
withDevelAppPort =
toDyn $ defaultDevelApp loader getApplication
getApplicationDev :: IO (Int, Application)
getApplicationDev =
defaultDevelApp loader getApplication
where
loader = loadConfig (configSettings Development)
{ csParseExtra = parseExtra