Elementary functions Using the interactive system, I define the square function, and the recursive factorial function. All allocation and deallocation operations are fully automatic. I give the example of lists.
Insertion sort is defined with two recursive routines, using pattern matching on lists.
No restrictions on functions, that may be higher-order. Combined with polymorphism, higher-order functionality allows the definition of the functional composition of two functions. In addition to data type definition, the pattern matching facility leads to an easy way of defining functions on symbolic data. Writing a parser is always a bit technical, you may like to omit it. However, you can find a parser for the above expression data type.