An applicative value can be seen as a value with an added context. Functional programming uses functions instead of variables. Haskell is a pure functional programming language that uses lazy evaluation, pattern matching, list comprehensions, and type polymorphism. Typeclasses define properties of types like Eq, Ord, Show, Read, and Enum. Functions can be lifted to operate on applicative types like Maybe and [] to provide context.