Unfortunately, in an introductory tutorial, many of Haskell's most powerful--but
complex--features cannot be covered. In particular, the whole area of type classes and
algebraic types (including abstract data types) is a bit too much for a first introduction.
For readers whose interest is piqued, it is enough to mention that Haskell allows you to
create your own data types, and to inherit properties of those data types in type
instances. The Haskell type system contains the fundamental features of object-oriented
programming (inheritance, polymorphism, encapsulation); but in a way that is almost
impossible to grasp within a C++/Java/Smalltalk/Eiffel style of thinking.
The other significant element omitted is a discussion of monads, and therefore of I/O. It
seems strange to write a tutorial that does not even start with a "Hello World!"
program, but thinking in a functional style requires a number of shifts. While that "Hello
World!" is quite simple, it also involves the mini "pseudo-imperative" world of monads.
It would be easy for a beginner to be lulled in by the pseudo-imperative style of I/O, and
miss what is really going on. Swimming is best learned by getting in the water.