This document provides an introduction to the Haskell programming language. It discusses Haskell's features such as being purely functional, lazily evaluated, statically typed, and supporting currying. It also covers Haskell concepts like functions as first-class citizens, pattern matching, monads, and how Haskell avoids side effects through referential transparency and purity. Examples are given for many of these features to illustrate how they work.