starter-0.3.0: Develop applications without restarts

Copyright(c) Raghu Kaippully 2018
Safe HaskellNone



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.

  1. In some module of your program (e.g. MyModule), define a variable mySettings of type StarterSettings.
  2. Define a function runDevMode = runStarter mySettings.
  3. Create a .ghci file in your project with the following contents:

    :load MyModule Starter
    :def! starter runDevMode
  4. 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.
  5. You can terminate the session with a Ctrl+C.



data StarterSettings Source #




  • starterProgram :: String -> IO ()

    The program to be run by starter. The command line arguments passed to the GHCi command will be passed to this function.

  • starterCommand :: String

    The GHCi command name

  • starterCommandExpression :: String

    The expression that should be bound to the GHCi command. For e.g., if you created a .ghci file with the command :def! starter runDevMode, then this should be set to runDevMode.

  • starterIsRestartable :: FilePath -> Bool

    Predicate to determine if the program should be restarted on change of a file.

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.