úÎ!R¯P(      !"#$%&'NoneEdaemonsDe-serialize data from strict ( s. Uses cereal's incremental  parser.daemonsSerialize data into strict (s.NoneX›daemons.A simple handler: takes an incoming stream of (s, an stream of (Ps, and ties them together somehow. Conceptually, the simplest handler would be identity: Ñimport Control.Monad import Control.Pipe import Data.ByteString.Char8 handler reader writer = do let identity = forever $ do x <- await yield x runPipe (writer <+< identity <+< reader)See the pipes- tutorial for more examples of writing pipes.Since (4s are fairly boring by themseleves, have a look at Control.Pipe.Serialize0 which lets you deserialize/serialize pipes of ( s easily.daemonsStream data from the socket.daemonsStream data to the socket.daemons4Listen for connections on the given socket, and run Ì on each received connection. The socket should previously have been bound to a port or to a file. Each handler is run in its own thread. Even in case of an error, the handlers' sockets are closed.daemonsRun  on the given socket.None$daemons‹Send a single command over the outgoing pipe and wait for a response. If the incoming pipe is closed before a response arrives, returns Nothing.daemonscWait for commands on the incoming pipe, handle them, and send the reponses over the outgoing pipe.Safe0Õ daemons¯Where should the output (and input) of a daemon be redirected to? (we can't just leave it to the current terminal, because it may be closed, and that would kill the daemon).When in doubt, just use ), the default value. ' causes the output to be redirected to  /dev/null4. This is safe and is what you want in most cases.WIf you don't want to lose the output (maybe because you're using it for logging), use   , instead. daemonsËRun the given action detached from the current terminal; this creates an entirely new process. This function returns immediately. Uses the double-fork technique to create a well behaved daemon. If pidfilex is given, check/write it; if we cannot obtain a lock on the file, another process is already using it, so fail. The  redirection< parameter controls what to do with the standard channels (stdin, stderr, and stdout).See: ,http://www.enderunix.org/docs/eng/daemon.php^Note: All unnecessary fds should be close before calling this. Otherwise, you get an fd leak. daemonsReturn *B if the given file is locked by a process. In our case, returns *7 when the daemon that created the file is still alive.daemonsSend +\ to the process recorded in the pidfile. This gives the process a chance to close cleanly.daemons5Kill a process and wait for it to release its pidfiledaemonsSend ,N to the process recorded in the pidfile. This immediately kills the process.-daemons;Send a signal to a process whose pid is recorded in a file. daemonspidfiledaemons redirectiondaemonsprogram  NoneO‰ daemons%The location of the daemon's pidfile.daemons,The configuration options of a daemon. See  for a description of each.daemonsSimple wrapper around S which uses a simple function to respond to commands and doesn't deal with pipes.The handlerA is just a function that takes a command and returns a response.daemons¥Start a daemon running on the given port, using the given handler to respond to events. If the daemon is already running, don't do anything. Returns immediately. The pidfile PidFile optionsi will be created and locked. This function checks the pidfile to see if the daemon is already running.FThe daemon will listen for incoming connections on all interfaces on daemonPort options.The handler1 is a function that takes the reader and writer  ByteString+ pipes and does something with them. See  for an example handler.daemonsdStart the given handler in the foreground. It will listen and respond to events on the given port.This is the function that  runs on the daemon thread. daemons[Send a command to the daemon running at the given network address and wait for a response. This is a simple wrapper around !> that sends a single command and waits for a single response.AIf the connection is closed before receiving a response, return ..!daemonsgConnect to the given network address and run the handler on the reader and wrier pipes for the socket.The handler1 is a function that takes the reader and writer  ByteStringC pipes and does something with them. For an example handler, see 2, which sends a command and waits for a response."daemons.Create a socket and bind it to the given port.#daemons7Create a socket connected to the given network address.daemonsnamedaemonsoptionsdaemonshandlerdaemonsnamedaemonsoptionsdaemonshandler daemonshostnamedaemonsportdaemonscommand!daemonshostnamedaemonsportdaemonscommand !"# !"#/      !"#$%&'()*+,-./012345678978:;<=>?$daemons-0.3.0-E4ZWdIx1OP6A6TECNXUA0lControl.Pipe.SerializeControl.Pipe.SocketControl.Pipe.C3System.Posix.Daemon System.DaemonData.SerializeGet deserializer serializerHandler socketReader socketWriterrunSocketServerrunSocketClient commandSendercommandReceiver RedirectionDevNullToFile runDetached isRunningkill killAndWait brutalKill$fDefaultRedirection$fShowRedirectionPidFileInHome DaemonOptions daemonPort daemonPidFileprintOnDaemonStartedHostNamePortensureDaemonRunningensureDaemonWithHandlerRunningrunInForeground runClientrunClientWithHandlerbindPort getSocket$fIsStringPidFile$fDefaultDaemonOptions $fShowPidFile$fShowDaemonOptionsbytestring-0.10.8.2Data.ByteString.Internal ByteString1data-default-class-0.1.2.0-FeIQ5tLoVZBHMSgrT9zptQData.Default.Classdefghc-prim GHC.TypesTrue unix-2.7.2.2System.Posix.SignalssigQUITsigKILLsignalProcessByFilePathbase GHC.MaybeNothing