Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haskell libraries overview and their quality [closed]

I want to use Haskell in production. It has a lot of libraties but not all of them are stable, ready-to-use and well-developed. Some libraries with interesting conceptions have experimental status. Many libraries are still in minor versions (0.0.1 for example). Some of them just abandoned. Hackage too huge to monitor them, so I need a brief slice of the current libraries state, their prospects and suitability for use.

I understand that question is very broad, but this information will be useful to anyone in any way. Here we can gather information bit by bit and then use it for an informative paper.

So what libraries I can use for:

  • Fast arrays capable of handling millions of items
  • Fast and powerful maps (probably, Data.Map?)
  • Fast, generic and convenient trees
  • Queues, hashtables
  • Regular expressions
  • Finite state machines
  • Neural networks, genetic algorithms
  • Mathematical calculations
  • Physics (wich can be used in game developing)
  • GUI
  • Image processing (we have various image formats actually)
  • Working with databases (maybe ORM or some DSLs to generate SQL)
  • Functional reactive programming
  • OpenGL bindings (yes, HOpenGL is good), OpenAL and OpenCL bindings
  • Parsing (Parsec is great I think)
  • Multithread and parallel programming
  • Network
  • Multipurpose game engines
  • Something else?

What is also interesting to have the tools for:

  • Testing (QuickCheck)
  • Logging (Maybe hslogger)
  • Profiling
  • Debugging

Here the links to the similar topics:

  • What are the best Haskell libraries to operationalize a program?
  • Regex & String Libraries in Haskell
  • Libraries for strict data structures in Haskell
  • Memory efficient strings in Haskell
  • Which Haskell library for computer graphics geometry?
  • Which Haskell XML library to use?

Other links

  • Applications and libraries (list and brief description)
  • Regular expressions
  • Haskell libraries you should use
  • There are a hell of a lot of Haskell libraries now. What are we going to do about it?
  • Popular Haskell Packages: Q2 2010 report

Thank you.

like image 631
Alexander Granin Avatar asked Feb 15 '12 01:02

Alexander Granin


1 Answers

I'll leave this as a community wiki - others people please feel free to add items or commentary in a reasonably concise manner.

  • Fast arrays capable of handling millions of items: Repa, Vector.
  • Fast and powerful maps: containers and unordered-containers.
  • Fast, generic and convenient trees:
  • Queues, hashtables: See the hashtables package for the latest and greatest.
  • Regular expressions: regex-pcre, regex-tdfa
  • Finite state machines: fsmActions - but it has version 0.4.3 alpha; fst - but not exactly a FSM. In some cases FRP will be useful instead of true FSM.
  • Neural networks, genetic algorithms: HNN is well established. As far as GA, we really have a framework (GA) and something that looks more complete (hgalib), but I haven't inspected it closely.
  • Mathematical calculations: hmatrix
  • Physics: dimensional.
  • GUI: GTK works well. I get the sense that wxhaskell generates more questions per-capita, but that's an informal impression.
  • Image processing: Parsing? Juicy-Pixels and JuicyPixels-Repa.
  • No, Image processing! The CV, Friday, yarr
  • Working with databases: Consider using the persistent-* wrappers, but also look at HDBC. PostgreSQL is stable. For Cassandra there are several but consider cql.
  • Functional reactive programming: Reactive-banana, netwire
  • OpenGL bindings: OpenGL, GL.
  • Parsing: Parsec, attoparsec, polyparse, frisby.
  • Multithread and parallel programming - See the parallel package and Control.Concurrency. monad-par is relatively new but frequently easier to reason about than the basic parallel library. See also async for concurrent IO.
  • Network - Depends. Network with blaze-builder, cereal, or binary. Also consider network-{conduit, enumerator, pipes}. There are several client/server wrappers out there as well.
  • Multipurpose game engines: For learning? gloss. Otherwise you probably need to roll your own but make use of OpenGL, GLUT, GTK, FRP, ogre bindings, SDL, and perhaps FunGEn if it's back on track.
  • Configuration management: configurator, config-ini.
  • XML Process: HaXml, HXT, xml-conduit - good, stable and powerful libraries.

Tools:

  • Testing - QuickCheck, LazySmallCheck, Test-Framework, hspec, HUnit
  • Logging - Yep, hslogger or dlist with the writer monad if that's all you need.
  • Profiling - hpc, thread scope, criterion, GHC time and space profiling utilities.
  • Debugging - GHCi debugging, unsafe (trace) debugging, making better property tests.

Related Questions:

  • Haskell library for 2D drawing
  • Filling the enclosed areas with random colors - Haskell - Friday
like image 83
16 revs, 7 users 72% Avatar answered Oct 13 '22 18:10

16 revs, 7 users 72%