A practical introduction to functional programming at Mary Rose Cook