Every function in Haskell consumes exactly one parameter and returns a value. Functions are pure and will always return the same output for the same input. Common features include pattern matching, lazy evaluation, and typeclasses. Typeclasses define properties of types like Eq (equality) and Show (string representation). Functions can be partially applied or composed for functional programming style. Useful types include Maybe for optional values and Either for error handling. The Functor typeclass allows types to be mapped over with fmap.