Development Libraries and Tools
This page contains a list of useful tools and libraries used frequently in Haskell development, for things such as debugging, benchmarking, static analysis and testing.
- ghci powerful and extensible debugger for GHC.
- hugs a haskell interpreter that includes debugging facilities.
2 Static Analysis Tools
Tools that perform some form of analysis on your code and provide useful feedback.
- HLint - Detect common style mistakes and redundant parts of syntax, improving code quality.
- Haskabelle - Convert haskell programs to isabelle theories.
- Catch - Detect common sources of runtime errors (currently difficult to compile)
- Sourcegraph - Haskell visualizer
Also, GHC when using the "-Wall" option provides a great deal of useful feedback.
3 Testing Frameworks
Libraries for testing Haskell.
- QuickCheck - powerful testing framework where test cases are generated according to specific properties.
- HUnit - unit testing framework similar to JUnit.
- Hspec - a testing framework similar to RSpec with support for QuickCheck and HUnit
- test-framework integrates both Hunit and quickCheck
- The Haskell Test Framework, HTF integrates both Hunit and quickCheck.
- Tasty - from the website: "lets you combine your unit tests, golden tests, QuickCheck/SmallCheck properties, and any other types of tests into a single test suite"
4 Dynamic Analysis Tools
Tools that analyse your program's run-time behavior to provide useful information, such as coverage or benchmarks.
- hat - analyse each evaluation step of your haskell program.
- hpc - check evaluation coverage of a haskell program, useful for determining test coverage.
- criterion - powerful benchmarking framework.
- threadscope - a new feature on the horizon which allows for benchmarking and visualization of multithreaded performance.
- ghc profiling tools - a powerful suite of profiling tools exist within GHC itself
5 Ancillary Tools
Tools that aid the development process, such as build tools, revision control systems, and similar, while not performing any interaction with the code itself.