\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!
\end{itemizep}