[Haskell-cafe] Random obeservations from my playing with Haskell

Rolf Wilms rolf_wilms at hotmail.com
Sun Dec 5 18:19:00 EST 2004


[Newbie warning on] Here's a few random obeservations from my playing with 
Haskell:

1. Switched to exploring Haskell from SML after finding out that it supports 
polymorphism in contrast to SML and has nicer syntax. Good.

2. Frequently saw a "quick sort" implementation in Haskell as a proof for 
its nice syntax. Realized that an implementation in Smalltalk would have 
been as nice.

2. Tried to implement a "modular arithmetic" module. Soon realized that a 
type parameterized over the modulus would be cool. Found out that it could 
be done, is rather
tricky (to an extent that I don't really understand it) and requires 
non-standard extensions to Haskell '98.

3. Considered Haskell as a replacement for an untyped DSL used in financial 
services. Soon realized that generic programming (e.g. sum premium over all 
covers) was not
possible and everything would have to be explicit. Bad. Recently discovered 
"scrap your boilerplate". Sounds like the solution but again requires 
nonstandard extensions.

4. Tried to implement the "game of nim", my version of "hello world", in 
Haskell. My god, this even works out nicer than in Prolog! But: in order to 
make it efficient a function
needs to be memoized. Tried to implement a generic function memoizer using 
FiniteMap and Monads. Didn't get it right, might be me lacking intellect. 
Recently found a
memoization modulue in Hugs, but no docs. There's a reference to the Haskell 
'97 Report, but I didn't find it online.

5. Again Haskell as a replacement for DSL: the error messages give too 
little hint about what's wrong, thus inadequate for DSL users. This foils 
all the benefits of type
inference.

6. While googeling for solutions w.r.t. Haskell I saw a lot of "papers" 
using scientific style. There's nothing wrong with papers but I'm glad that 
cooking receipts usually use a
simpler style.

7. There's a lot of discussion w.r.t state, at least on this list. Is 
threading state through many functions respectivley polluting many functions 
with monads the solution?

My overall impression is that Haskell has a very nice syntax and offers 
sophisticated concepts (i.e.non-strictness, type inference) making it 
attractive for computer science.
But for most real-world applications it is intellectually too demanding (me 
included). There is hope though. Haskell seems to be in a state of 
adaptilbiliy. And it may influence
other languages.

BTW: here's that sweet (but inefficient) Haskell code for the "game of nim":
> moves [] = []
> moves (x:xs) = xs:[y:xs | y <- [1..x-1]] ++ [x:z | z <- moves xs]
> win [] = True
> win x = foldr ((||) . not . win) False (moves x)

To find your next move, consider

> filter (not . win) (moves [1,2,2])


More information about the Haskell-Cafe mailing list