title: What are the best Haskell libraries to operationalize a program?
body: <p>If I'm going to put a program into production, there are several things I need that program to do in order to consider it "operationalized" – that is, running and maintainable in a measurable and verifiable way by both engineers and operations staff. For my purposes, an operationalized program must:</p>
  
  <ul>
  <li>Be able to log at multiple levels (ex: debug, warning, etc.).</li>
  <li>Be able to collect and share metrics/statistics about the types of work the program is doing and how long that work is taking. Ideally, the collected metrics are available in a format that's compatible with commonly-used monitoring tools like <a href="http://ganglia.sourceforge.net/" rel="noreferrer">Ganglia</a>, or can be so munged.</li>
  <li>Be configurable, ideally via a system that allows configured properties in running programs to be updated without restarting said programs.</li>
  <li>Be deployable to remote servers in a repeatable way.</li>
  </ul>
  
  <p>In the Scala world, there are good libraries for dealing with at least the first three requirements. Examples:</p>
  
  <ul>
  <li><a href="https://github.com/codahale/logula" rel="noreferrer">Logula</a> for logging.</li>
  <li><a href="https://github.com/codahale/metrics" rel="noreferrer">Metrics</a> or <a href="https://github.com/twitter/ostrich" rel="noreferrer">Ostrich</a> for collecting and reporting metrics.</li>
  <li><a href="https://github.com/robey/configgy" rel="noreferrer">Configgy</a> or <a href="https://github.com/codahale/fig" rel="noreferrer">Fig</a> for configuration.</li>
  </ul>
  
  <p>As for deployment, one approach taken in the Scala world is to bundle together the bytecode and libraries that comprise one's program with something like <a href="https://github.com/codahale/assembly-sbt" rel="noreferrer">assembly-sbt</a>, then push the resulting bundle (a "fat JAR") to remote servers with a tool like <a href="https://github.com/capistrano/capistrano" rel="noreferrer">Capistrano</a> that executes commands in parallel over SSH. This isn't a problem that necessitates language-specific tools, but I'm curious if such a tool exists in the Haskell community.</p>
  
  <p>There are probably Haskell libraries that provide the traits I've described above. I'd like to know which of the available libraries are considered "best"; that is, which are most mature, well-maintained, commonly used in the Haskell community, and exemplary of Haskell best practices. </p>
  
  <p>If there are any other libraries, tools, or practices around making Haskell code "production-ready", I'd love to know about those as well.</p>