A Functional Introduction To Computer Science (Part I)