Copyright | (c) Raghu Kaippully 2018 |
---|---|
License | MPL-2.0 |
Maintainer | rkaippully@gmail.com |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Starter
Description
Server side software development usually needs frequent restarts. You would launch a server, make code changes, recompile the code, and then restart the server. Starter attempts to automate this tedious cycle.
How does it work?
Starter is a library that you link to your program. With a few simple steps, you can set up a GHCi session that automatically reloads your program whenever your source code changes.
- In some module of your program (e.g.
MyModule
), define a variablemySettings
of typeStarterSettings
. - Define a function
runDevMode = runStarter mySettings
. Create a
.ghci
file in your project with the following contents::load MyModule Starter :def! starter runDevMode
- Now you can start your program with the
:starter
command. This will run your program under a monitor. When the source code changes, the monitor will interrupt the program with an exception, reload the modules with a:reload
command and restart the program. - You can terminate the session with a Ctrl+C.
- data StarterSettings = StarterSettings {
- starterProgram :: String -> IO ()
- starterCommand :: String
- starterCommandExpression :: String
- starterIsRestartable :: FilePath -> Bool
- defaultStarterSettings :: StarterSettings
- runStarter :: StarterSettings -> String -> IO String
Documentation
data StarterSettings Source #
Constructors
StarterSettings | |
Fields
|
defaultStarterSettings :: StarterSettings Source #
Default StarterSettings
that uses ":starter" as the GHCi command and restarts on all file
changes.
runStarter :: StarterSettings -> String -> IO String Source #
Run a program under a monitor for source code changes. The StarterSettings
argument contains
details about what needs to be run and how the monitor behaves. The second argument is the
command line passed to the GHCi command from the GHCi session. For e.g, if you start the program
with:
:starter foo bar
then "foo bar" will be passed as the second argument to runStarter
.