# Preliminaries Last updated: 2022-04-10

*Welcome to the Functional Programming Course Web Page.*

**Course information**

Instructor | Associate Professor Dr. Mihailescu Marius Iulian |

m.mihailescu.mi@spiruharet.ro | |

Teaching Assistant | Associate Professor Dr. Mihailescu Marius Iulian |

**Course description**

The primary goal of this type of programming paradigms course is to introduce students to the fundamentals of functional programming using the Haskell and F# (F Sharp) language. You'll pick up a variety of skills and see how they might be applied to the developing process of various programs.

A solid link between mathematics and software design is provided by functional programming. Haskell and other functional programming languages have characteristics that make them appealing for parallel processing, quick software prototyping, and mathematical computations. Programs are treated as mathematical equations in functional programming. This makes it possible to write programs that are both clear and succinct for a variety of applications. Significantly, it enables formal proof methods to be used to establish the desired features of these programs. Their effectiveness can also be increased using the same techniques.

Experience has shown that functional programming approaches can also be utilized to enhance the design of programs written in imperative languages after they have been learnt.

The course serves as an introduction to functional programming concepts. It presents key ideas and related methods for creating programs that are clear and concise. It also describes how to convert them into more effective programs. The course will give students practical experience using current functional programming languages like Scheme and Haskell.

## Course Objective(s)

The main objective(s) of the course and the expected outcomes are:

- Learn the fundamentals of functional programming and how to think in functional paradigm terms.
- Using abstraction within the program strucutre.
- Gain the ability to explain and use the recursion (at a glance), as well as being capable to make the difference between recursive process and iterative process.
- Using
*high-order functions (HOF)*and implement complex approaches for different problems. - What to do when we are dealing with delays in the evaluation for infinite data structures.
- Understanding how the code is evaluated.
- Being able to write complex programs for different topics, such as databases, distributed systems, cryptography, artificial intelligence or machine learning.

## Course Structure

# | Course Title | Date and Time |
---|---|---|

01 | Introduction in Functional Programming | October 4^{th}, 2022 |

02 | Haskell, GHC, Data Types, and Operators | October 11^{th}, 2022 |

03 | Funcții Standard | October 18^{th}, 2022 |

04 | Recursion | October 25^{th}, 2022 |

05 | High Order Functions (HOF) and Lambda Expressions | November 1^{st}, 2022 |

06 | IO Standard Functions and Files | November 8^{th}, 2022 |

07 | Monads | November 15^{th}, 2022 |

08 | Monads Transformers | November 22^{nd}, 2022 |

09 | Exceptions | November 29^{th}, 2022 |

10 | TBA | December 6^{th}, 2022 |

11 | TBA | December 13^{rd}, 2022 |

12 | TBA | December 20^{th}, 2022 |

## Laboratory Structure

# | Laboratory Title | Date and Time |
---|---|---|

01 | Applications and Exercises with Lambda Calculus | October 4^{th}, 2022 |

02 | Exercises with Data Types and Operators | October 11^{th}, 2022 |

03 | Exercises with Recursion | October 18^{th}, 2022 |

04 | Exercises with High-Order Functions (HOF) | October 25^{th}, 2022 |

05 | Applications with Standard Functions and Files | November 1^{st}, 2022 |

06 | Exercises with Monads | November 8^{th}, 2022 |

07 | Exercises with Monad Transformers | November 15^{th}, 2022 |

08 | Applications with Exceptions | November 22^{nd}, 2022 |

09 | Exercises with Exceptions | November 29^{th}, 2022 |

10 | TBA | December 6^{th}, 2022 |

11 | TBA | December 13^{rd}, 2022 |

12 | TBA | December 20^{th}, 2022 |

## Examination

**The final mark is composed from mid-terms and final exam. See the details from below.**

*The mid-terms represents 50% from the final mark. *

- 1
^{st}mid-term (**10%**) - Course: October 31st, 2022 - 2
^{nd}mid-term (**20%**) - Laboratory: November 14th, 2022 - 3
^{rd}mid-term (**20%**) - Laboratory: November 28th, 2022

For the 1^{st} mid-term the student will receive 30 questions, each question will have 3 points (30 * 3p = 90p). For this mid-term test (evaluation) 10p *ex-officio* point will be received.

*The final exam will represent 50% from the final mark.*

## Bibliography

- Nita, Stefania Loredana, and Marius Mihailescu. Haskell Quick Syntax Reference: A Pocket Guide to the Language, APIs, and Library. Apress L.P., 2019. https://link.springer.com/book/10.1007/978-1-4842-4507-1
- Mena, Alejandro Serrano. Practical Haskell: A Real World Guide to Programming. Second edition, Apress, 2019. https://link.springer.com/book/10.1007/978-1-4842-4480-7
- Nita, Stefania Loredana, and Marius Mihailescu. Practical Concurrent Haskell: With Big Data Applications. 1st ed. 2017, Apress : Imprint: Apress, 2017. https://link.springer.com/book/10.1007/978-1-4842-2781-7
- Learn Haskell Programming - Tutorials Point. https://www.tutorialspoint.com/haskell/index.htm
- Learn You a Haskell for Great Good!, http://learnyouahaskell.com/chapters
- Kurt, Will. Get Programming with Haskell. Manning Publications Co, 2018.
- Hutton, Graham. Programming in Haskell. Second edition, Cambridge University Press, 2016. https://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/1316626229
- Hutton Graham University Web Page and Lectures - http://www.cs.nott.ac.uk/~pszgmh/