@@ -1,7 +1,10 @@
11{-# LANGUAGE OverloadedStrings #-}
22{-# LANGUAGE ForeignFunctionInterface #-}
33{-# LANGUAGE CPP #-}
4−module Network.Wai.Handler.Launch (run) where
4+module Network.Wai.Handler.Launch
5+ ( run
6+ , runUrl
7+ ) where
58
69import Network.Wai
710import Network.HTTP.Types
@@ -115,27 +118,35 @@ fixHeaders front (x:xs) = fixHeaders (front . (:) x) xs
115118
116119#if WINDOWS
117120foreign import ccall "launch"
118− launch :: IO ()
121+ launch' :: Int -> CString -> IO ()
122+#endif
123+
124+launch :: String -> IO ()
125+
126+#if WINDOWS
127+launch s = withCString s $ launch' 4587
119128#else
120−launch :: IO ()
121−launch = forkIO (rawSystem
129+launch s = forkIO (rawSystem
122130#if MAC
123131 "open"
124132#else
125133 "xdg-open"
126134#endif
127− ["http://127.0.0.1:4587/"] >> return ()) >> return ()
135+ ["http://127.0.0.1:4587/" ++ s] >> return ()) >> return ()
128136#endif
129137
130138run :: Application -> IO ()
131−run app = do
139+run = runUrl ""
140+
141+runUrl :: String -> Application -> IO ()
142+runUrl url app = do
132143 x <- newIORef True
133144 forkIO $ Warp.runSettings Warp.defaultSettings
134145 { Warp.settingsPort = 4587
135146 , Warp.settingsOnException = const $ return ()
136147 , Warp.settingsHost = "127.0.0.1"
137148 } $ ping x app
138− launch
149+ launch url
139150 loop x
140151
141152loop :: IORef Bool -> IO ()