Syllabus
Unit I
Why are there so many programming languages – Programming Paradigms: Imperative, Object-oriented, Functional etc. – language characteristics: compiled and interpreted, type system, static and dynamic type checking, grouping data and operations, information hiding and abstract data types etc.
Haskell Basics, Haskell Types, type classes, functions: guards, pattern matching and recursion, lambda functions, functional composition, lists and list comprehension, higher-order functions: currying etc.
Unit II
Abstract Data Types, Lazy Evaluation, Streams, IO, Applicative Functors, monad, Real World applications.
Unit III
Functional Principles in Contemporary Languages – avoiding state updating and control structures: encapsulation, comprehension, recursion – callable: named functions and lambdas, closures, multiple dispatch – lazy evaluation – higher order functions.
Objectives and Outcomes
Pre-requisite(s)
The students must have learnt programming language(s) in either of the programming paradigms – Imperative and/or Object-oriented.
Course Objectives
The objective of this course is to open one’s mind to different way of solving real-world problems with functional style as the primary reference against imperative and object-oriented paradigms. In fact, the more tools’ students have while solving real-world problems, the better they will be in picking the best tool for the job. The course will also help students gain different programming language properties which will be helpful for them when they explore new programming languages.
Course Outcomes
CO1: Apply functional programming principles while designing solutions to problems and developing functional programs.
CO2:Formulate generic abstractions with higher order procedures while solving problems.
CO3:Formulate abstractions with data especially using lists and infinite data structures like streams.
CO4: Apply functional programming principles while developing solutions in contemporary languages.
CO-PO Mapping
PO/PSO
&CO |
PO1 |
PO2 |
PO3 |
PO4 |
PO5 |
PO6 |
PO7 |
PO8 |
PO9 |
PO10 |
PO11 |
PO12 |
PSO1 |
PSO2 |
CO1 |
2 |
2 |
2 |
|
2 |
|
|
|
|
|
|
|
2 |
2 |
CO2 |
2 |
2 |
2 |
1 |
2 |
|
|
|
|
|
|
|
2 |
2 |
CO3 |
2 |
2 |
2 |
1 |
2 |
|
|
|
|
|
|
|
2 |
2 |
CO4 |
3 |
2 |
3 |
1 |
2 |
|
|
|
|
|
|
|
2 |
2 |
Evaluation Pattern
Evaluation Pattern – 70:30
Assessment |
Internal |
External |
Mid Term Examination |
20 |
|
*Continuous Assessment – Theory(CAT) |
10 |
|
*Continuous Assessment – Lab(CAL) |
40 |
|
**End Semester |
|
30 (50 Marks – 2 hours) |
*CAT – Can be Quizzes, Assignments, and Reports
*CAL – Can be Lab Assessments, Project, and Report
**End Semester can be theory examination/ lab-based examination
Text Books / References
Textbook(s)
Richard Bird, “Thinking Functionally with Haskell”, Cambridge University Press, 2014.
Reference(s)
Rebecca Skinner, “Effective Haskell – Solving Real-World Problems with Strongly Typed Functional Programming”, Pragmatic Bookshelf, 2023.
Richard S. Bird and Jeremy Gibbons, “Algorithm Design with Haskell”, Cambridge University Press, 2020.
David Mertz, “Functional Programming in Python”, O’Reilly, 2015.
John De Nero, “Composing Programs”. Online https://composingprograms.com/
Wampler Dean, “Functional Programming for Java Developers”, O’Reilly, 2011.