On Monday, June 15, 2015, Shishir Srivastava <shishir.srivastava@gmail.com> wrote:
Hi, 

The Data.Complex package defines the new data type 'Complex' as 

----------
data Complex a  = !a :+ !a 
-------
Where ':+' is an infix operator. I don't however understand the usage of '!' in front of the type variable 'a'. What exactly is the purpose of '!' ?

'!' is a strictness annotation. This means that when the value is forced to weak-head normal form (by pattern matching, BangPatterns, or seq), then the fields with the ! will also be forced to weak-head normal form.

See also:
http://chimera.labs.oreilly.com/books/1230000000929/ch02.html#sec_par-eval-whnf
https://hackhands.com/lazy-evaluation-works-haskell/

-bob