Studenterna studerar centrala abstraktioner som lat/strikt evaluering, funktorer, monader och liknande, och lär sig hur dessa kan användas för att uttrycka effekter som tillstånd (state), avbrott (exceptions) och in- och utdata på ett rent funktionellt sätt. Kursen behandlar även metoder för att strukturera större funktionella lösningar, inklusive konstruktion av inbäddade domänspecifika språk (EDSL), användning av Software Transactional Memory (STM) för säker samtidighet samt tekniker för parallell och effektiv beräkning baserade på algebraiska egenskaper såsom associativitet och kommutativitet. Laborationer / programmeringsuppgifter utvecklar praktiska färdigheter i att utforma, implementera och resonera om funktionella program. Studenterna får erfarenhet av typklasser, rekursionsscheman och memoisering, samt relevanta verktyg för att bygga, testa och dokumentera projekt. Särskild vikt läggs vid kalkylerande bevis och egenskapsbaserad testning som vägar för att nå korrekthet och effektivitet. Studenterna lär sig att kritiskt bedöma avvägningar mellan abstraktion och prestanda samt att strukturera programvara på ett modulärt, underhållbart och verifierbart sätt.
Förutsättningar
Grundläggande behörighet för grundnivå
Sökande med en programregistrering på ett program där kursen ingår i programplanen undantas från kravet