\begin{itemizep} \item forget about imperative, procedural, OOP; forget about any programming language \item think in types! \begin{itemizep} \item don't be afraid of type errors \item let the type-checker do the work for you (does this function do what I think it does?) \item understand functions just by looking at their type signature? \end{itemizep} \item think abstract! \begin{itemizep} \item don't repeat yourself! \item "develop a solution space, rather than an individual solution" -- Ralf Hinze \item "imagine a graph, rather than a single path" -- Ralf Hinze \item "first solve a more general problem, then extract the interesting bits and pieces by transforming the general program into more specialised ones" -- Ralf Hinze \end{itemizep} \item solve atomic parts of general problems and combine them into greater solutions \item don't be afraid of recursion! \item write less, think more! \end{itemizep}