-- Calling a function with a fixed number of arguments multiply x y = x * y multiply 10 20 -- returns 200 -- Calling a function that requires no arguments -- Normally, you use constant instead of function without arguments: twopi = 6.28 -- But you can also pass special value as the first argument indicating function call: twopi () = 6.28 -- definition twopi :: Num a => () -> a -- its type twopi () -- returns 6.28 -- Partial application and auto-currying is built-in. multiply_by_10 = (10 * ) map multiply_by_10 [1, 2, 3] -- [10, 20, 30] multiply_all_by_10 = map multiply_by_10 multiply_all_by_10 [1, 2, 3] -- [10, 20, 30] -- TODO: -- Calling a function with optional arguments -- Calling a function with a variable number of arguments -- Calling a function with named arguments -- Using a function in statement context -- Using a function in first-class context within an expression -- Obtaining the return value of a function -- Distinguishing built-in functions and user-defined functions -- Distinguishing subroutines and functions -- Stating whether arguments are passed by value or by reference