<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head>
<title>Functional Languages</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<link rel="shortcut icon" href="icon.ico" />
<script src="common_en.js" charset="utf-8" type="text/javascript"></script> 
<link rel="stylesheet" href="common.css" type="text/css" />
</head>
<body onload="javascript:resetForms(); javascript:slidy_init();">
<div><h1 class="cover">Functional Languages</h1>
<div id="info"></div>
<ul>
<li><a href="#basic-information">Basic Information</a></li>
<li><a href="#prerequisitesassumed-knowledge">Prerequisites/Assumed Knowledge</a></li>
<li><a href="#getting-help">Getting Help</a></li>
<li><a href="#objectives">Objectives</a></li>
<li><a href="#online-teaching">Online teaching</a></li>
<li><a href="#requirements">Requirements</a></li>
<li><a href="#final-examination">Final examination</a></li>
<li><a href="#exam-topics">Exam topics</a></li>
<li><a href="#course-material">Course Material</a></li>
</ul>
</div>
<section id="basic-information" class="level1">
<h1>Basic Information</h1>
<ul>
<li>Lecturer: István Bozó, <code>bozo_i</code> at <code>inf.elte.hu</code></li>
<li>Lab instructors:
<ul>
<li>Rafaël Bocquet, <code>bocquet</code> at <code>inf.elte.hu</code></li>
<li>Donkó István, <code>isti115</code> at <code>inf.elte.hu</code></li>
</ul></li>
<li>Course code: <code>IPM-18feszFUNLEG</code></li>
<li>Lecture: Thursdays, 12:00 – 14:00, online in Teams</li>
<li>Lab group 1: Thursdays, 08:00 – 10:00, online in Discord</li>
<li>Lab group 2: Tuesdays, 16:00 – 17:30, online in Discord</li>
</ul>
</section>
<section id="prerequisitesassumed-knowledge" class="level1">
<h1>Prerequisites/Assumed Knowledge</h1>
<p>Some previous experience in functional programming is recommended, but not assumed. For the ones who have not learned FP before, it might be useful to attend the lab sessions for the “Functional Programming” (<code>IP-12FFUNPEG</code>) BSc course in parallel, but it is not required.</p>
</section>
<section id="getting-help" class="level1">
<h1>Getting Help</h1>
<p>If you are having difficulty with the course material, you are encouraged to contact your instructor as soon as possible. You can get help in various ways:</p>
<ul>
<li>During classes.</li>
<li>By email.</li>
<li>At consultation time.</li>
</ul>
<p>All students are encouraged to ask questions and make suggestions during class time. It is your responsibility to keep up with the course material. Ask for help before it is too late!</p>
<p>Please note that the instructors’ contact information is available at the top of this page.</p>
</section>
<section id="objectives" class="level1">
<h1>Objectives</h1>
<p>After completing this course, you should</p>
<ul>
<li>Understand the following concepts:
<ul>
<li>Describing computations by expressions without implicit side effects.</li>
<li>Use of strict and static typing to provide better guarantees for program correctness.</li>
<li>Expressions (function application, variables, literals, Booleans, lists, tuples, characters).</li>
<li>Function definitions (patterns, guards, recursion, local definitions).</li>
<li>Type of expressions and functions (function type, basic types, type of lists and tuples, parametric and ad-hoc polymorphism).</li>
<li>Higher-order functions (sections, lambda expression, function composition, folds).</li>
<li>Data types (type synonyms, parametric and recursive algebraic data types, higher-order data types).</li>
<li>Type classes (type classes and instances).</li>
<li>Monadic programming (evaluation of monads, basic monad types).</li>
</ul></li>
<li>Be able to employ the concepts above in software development.</li>
<li>Be able to use the GHCi interpreter for developing small functional programs; understand the error messages of the interpreter.</li>
</ul>
<p>The course exposes students to pure functional programming. It develops basic skills required to define pure functions and data types.</p>
</section>
<section id="online-teaching" class="level1">
<h1>Online teaching</h1>
<ul>
<li>Lectures take place in Teams.</li>
<li>Lab sessions take place in Discord.</li>
<li>Recordings and materials for the lecture and practice sessions will be uploaded to folders in Teams.</li>
</ul>
</section>
<section id="requirements" class="level1">
<h1>Requirements</h1>
<p>In accordance to the attendance regulations, you cannot pass the course if you miss the practice sessions more than 3 times.</p>
<p>During each practice (except the first one), there is a small assignment in <a href="https://tms.inf.elte.hu/">TMS</a>. The result can be 0, 1 or 2. There will be three additional larger homework assignments, for 4 points each. These results are added up and at the end of the semester the sum has to be at least 12.</p>
</section>
<section id="final-examination" class="level1">
<h1>Final examination</h1>
<p>You need to meet the tutorial requirements in order to be allowed to take the final exam.</p>
<p>We are expecting that the final examination will be an oral exam, online in Teams. This may change depending on the evolution of the COVID-19 pandemic and academic regulations during the semester.</p>
<p>The examinee may be required to show a personal identification card with photograph. After the exam tasks are given, the examinee is provided with 25 minutes of preparation time. The tasks consist of two Haskell programming exercises. Then, the examinee must present their solutions. The examiners may ask additional questions about any topic from the course curriculum.</p>
<p>During examination, you may only use the documentation, API search, GHCi and an excerpt of common functions, if not specified otherwise. Internet access is not available. Violation of rules results in immediate failure of the exam.</p>
</section>
<section id="exam-topics" class="level1">
<h1>Exam topics</h1>
<ol type="1">
<li><p><em>Types in Haskell</em>: basic types, list types, tuple types, function types, polymorphic and overloaded functions, currying, partial application.</p></li>
<li><p><em>Function definitions</em>: conditional expressions, guarded equations, pattern matching (tuple patterns, list patterns), lambda expressions, operation sections.</p></li>
<li><p><em>List comprehensions</em>: multiple generators, dependant generators, guards.</p></li>
<li><p><em>Recursion</em>: recursive functions over lists, recursive functions with multiple arguments.</p></li>
<li><p><em>Higher-order functions</em>: defining higher-order functions, passing functions to higher-order functions.</p></li>
<li><p><em>Defining new types</em>: type synonyms, defining algebraic data types, defining functions over new data types, using parametric data types (<code>Maybe</code> and <code>Either</code>).</p></li>
<li><p><em>Declaring type classes</em>: declaring new type classes, making a type an instance of a type class.</p></li>
</ol>
<p>Materials:</p>
<ul>
<li><a href="http://learnyouahaskell.com/">Learn You a Haskell for Great Good (online)</a></li>
<li><a href="http://book.realworldhaskell.org/read/">Real World Haskell (online)</a></li>
</ul>
</section>
<section id="course-material" class="level1">
<h1>Course Material</h1>
<p>There is no official textbook for the course. However, for additional learning, or for clarifying important concepts, we recommend:</p>
<ul>
<li><a href="http://people.inf.elte.hu/pgj/haskell/quickstart/">Quick Start to Functional Programming Through Haskell (online)</a></li>
<li><a href="http://learnyouahaskell.com/">Learn You a Haskell for Great Good (online)</a></li>
<li><a href="http://book.realworldhaskell.org/read/">Real World Haskell (online)</a></li>
<li><a href="http://www.cs.nott.ac.uk/~pszgmh/pih.html">Programming in Haskell, 2nd edition</a></li>
</ul>
<p>You can find additional helpful resources here:</p>
<ul>
<li><a href="http://www.haskell.org/">Official Haskell web page</a></li>
<li>Haskell library documentation: <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/">Hierarchical</a> and <a href="http://www.haskell.org/hoogle/">Hoogle</a></li>
</ul>
</section>
</body>
</html>

