Skip to content

Instantly share code, notes, and snippets.

@timothyklim
Forked from 3noch/.ghci
Created September 11, 2017 07:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timothyklim/6130f37be234c89e25a9ab31031f28fc to your computer and use it in GitHub Desktop.
Save timothyklim/6130f37be234c89e25a9ab31031f28fc to your computer and use it in GitHub Desktop.
Reflex-DOM Auto Reload Development with ghcid
:set prompt "> "
:set -isrc
:load Main
#!/usr/bin/env bash
port=${1:-9090}
ghcid -W --test "devMainAutoReload apiServer appWidget $port"
import Language.Javascript.JSaddle (JSM)
import Language.Javascript.JSaddle.Run (syncPoint)
import Language.Javascript.JSaddle.WebSockets (debugWrapper, jsaddleWithAppOr)
import Network.Wai (Application)
import Network.Wai.Handler.Warp (defaultSettings, run, runSettings, setPort, setTimeout)
import Network.WebSockets (defaultConnectionOptions)
-- | A @main@ for doing development.
devMain :: Application -> JSM () -> Int -> IO ()
devMain backend frontend port = do
putStrLn $ "Running dev server on localhost:" <> show port
app <- jsaddleWithAppOr
defaultConnectionOptions
(frontend >> syncPoint)
backend
runSettings (defaultSettings & setTimeout 3600 & setPort port) app
-- | A version of @devMain@ that can be used with @ghcid --test@ to get an auto-reloading server.
devMainAutoReload :: Application -> JSM () -> Int -> IO ()
devMainAutoReload backend frontend port =
debugWrapper $ \refreshMiddleware registerContext ->
devMain (refreshMiddleware backend) (registerContext >> frontend) port
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment