Haskell is a
purely
- has referential transparency - expressions are like LEGO blocks
- an expression evaluates to the same result regardless of context
- the same input produces the same output
functional
- functions are first-class objects - can be used as values and passed as arguments
- programs are declarative - they describe the logic of the computation and not the control flow
- the output value of a function depends only on arguments that are passed to the function
polymorphic
-
code can be written without mentioning specific types and use methods for groups of types
e.g. all values of typeclass Num can use addition
statically typed
-
the type of a variable is known at compile time - using either specific type declarations
or type inference (type is decided by the compiler)
lazy
- it only evaluates expressions when it really has to
programming language