views:

1259

answers:

6

There are a lot of packages on Hackage, some well known (such as HUnit) and some less known (such as AspectAG). I'm wondering which package you think is a hidden gem that deserves more users. Maybe a useful data structure, helpers for monads, networking, test, ...?

Which is your favorite "hidden gem" package on Hackage?

+10  A: 

Oleg Kiselyov's Iteratee. I still don't really understand how it works, but it's saved my life a couple of times when I've needed to do something like read 60,000 files quickly and didn't have time to figure out why the normal Haskell file access approaches were so slow.

Also Brian O'Sullivan's Attoparsec, which in my experience does perform much better than Parsec on things like large flat-file databases.

And now you can combine the two.

Conal Elliott's Vector-space packages up a lot of linear algebra functions very nicely, and also got me a little closer to feeling comfortable with type families.

Statistics (again by O'Sullivan) has been handy because I'd prefer to work in Haskell than in R.

HXT and Criterion aren't "hidden gems", but in my opinion they deserve to be more widely used.

Travis Brown
+8  A: 

Vector - fast arrays made easy (I don't like Data.Array). If I could only vote for one, this would be it right now.

Lazy Small Check (also see the paper) for exhaustive testing.

Cereal - all common data structures should have Binary and Serialize instances. Trust the compiler to drop dead code.

meldable-heap - Haven't gotten to use it yet, but this is an example of how software should be developed!

Chart - Its been useful for me when building charts for my paper and presentations.

Atom - I'd like an excuse to use it, but haven't had gotten one yet.

TomMD
+4  A: 

Some underappreciated, pragmatic libraries I use fairly often:

Don Stewart
+1  A: 

I forewarn that this is self-promotion, but I think that my package deserves more users than solely myself :)

So, timeplot is a tool for plotting time series from logs. It has quite a few features, see the extensive tutorial (lots of pics inside).

For example, you can use it to look at the effect of a heavyweight background process on 25%, 50% and 90% quantiles of your response times; or look at the number of users online throughout a day.

It is designed "in the Unix way": you take an arbitrary log and write a quick-and-dirty straightforward awk or perl script that transforms it into input for the program (consisting of "events": discrete value impulses, continuous value impulses and start/stop impulses).

It has been quite useful for me in analyzing log data, especially for diagnosing certain "infrastructural" performance problems: I look at plots of the system activity and I see what looks not the way it is supposed to look like.

jkff
+2  A: 

I like interlude - for when those darn 'head: undefined' messages just won't go away!

gwern
+1  A: 

I like the don't library:

main = don't $ do
   name <- getLine
   putStrLn $ "hello " ++ name
Caleb
Is this just a joke?
Wei Hu
Yes it was a joke, but its not entirely useless... it's like commenting out a block of code.
Caleb