@hackage daemons0.1.0
Daemons in Haskell made fun and easy
Categories
License
GPL-3.0-only
Maintainer
scvalex@gmail.com
Links
Versions
Installation
Dependencies (10)
- base >=4 && <5
- bytestring
- cereal
- data-default
- directory
- filepath Show all…
Dependents (7)
@hackage/githud, @hackage/steeloverseer, @hackage/acme-everything, @hackage/mp, @hackage/haskoin-wallet, @hackage/lord, Show all…
daemons
Daemons in Haskell made fun and easy
Example
Here's AddOne, a simple daemon that waits for a number and responds with the incremented number.
import Data.Default ( def )
import System.Environment ( getArgs )
import System.Daemon
addOne :: Int -> IO Int
addOne n = return (n + 1)
main :: IO ()
main = do
startDaemon "addOne" def addOne
[n] <- getArgs
res <- runClient "localhost" 5000 ((read n) :: Int)
print (res :: Maybe Int)
Running it, we see:
% addone 22
Just 23
% addone 41
Just 42
The two important functions above are startDaemon, which checks if a
daemon named addOne is already running, and starts it if not, and
runClient which connects to the daemon running on localhost:5000,
passes it a number, and waits for the response.
For a less trivial example, see the in-memory key-value store, Memo.
For an example that uses the streaming interface of daemons, see
PMTQ (Poor
Man's Task Queue).
Installation
This package is on Hackage. To install it, run:
cabal update
cabal install daemons
Modules
-
Control.Pipe.C3provides simple RPC-like wrappers for pipes. -
Control.Pipe.Serializeprovides pipes to serialize and deserialize streams of strictByteStrings using cereal. -
Control.Pipe.Socketprovides functions to setup strictByteStringpipes around sockets. -
System.Daemonprovides a high-level interface to starting daemonized programs that are controlled through sockets. -
System.Posix.Daemonprovides a low-level interface to starting, and controlling detached jobs.
See also
-
pipesThe Pipes Tutorial -
C3Wikipedia