Zaawansowane programowanie funkcyjne
Semestr zimowy 2013/14 |
Dariusz Biernacki |
Czwartek 12:15-14:00 |
Sala 140 |
3 ECTS |
Tematem seminarium jest przegląd zaawansowanych cech
języków funkcyjnych takich jak Haskell i Agda, a także
technik programowania wykorzystujących te
cechy. Przedstawione zostaną m. in. takie zagadnienia jak:
- Monady i transformatory monad
- Wejście/wyjście w czystych językach funkcyjnych
- Parsery kombinatoryczne
- Klasy typów
- Polimorfizm wyższego stopnia (higher-rank polymorphism)
- Uogólnione algebraiczne typy danych (GADT's)
- Typy zależne
- Metaprogramowanie
|
Terminarz
Data |
Temat |
Literatura |
Notatki |
Zadanie |
Prelegent |
03.10.2013 |
Spotkanie organizacyjne |
[D11, PJLH93, 1] |
|
|
|
10.10.2013 |
Monady w programowaniu funkcyjnym |
[2, 3, 4] |
Slajdy
Notatka o wolnych monadach
(LaTeX)
|
Lista zadań nr 1 |
Łukasz Dąbek |
17.10.2013 |
Transformatory monad |
[4, 5] |
Slajdy
Przykładowy kod
(LaTeX)
|
Lista zadań nr 2 |
Łukasz Czapliński |
24.10.2013 |
Parsery kombinatoryczne (monady, funktory aplikatywne) |
[7, 19] |
Slajdy
Kod
|
Lista zadań nr 3
|
Grzegorz Łoś |
07.11.2013 |
PLT Redex |
|
Notatki
Przykłady
|
Lista zadań nr 4
|
Wojciech Jedynak |
14.11.2013 |
Implementacja języków EDSL w Haskellu |
[13] |
Slajdy
Kod
(LaTeX)
|
Lista zadań nr 5
|
Piotr Krzemiński |
21.11.2013 |
Programowanie generyczne |
[12] |
Slajdy i kod
|
Lista zadań nr 6
|
Celina Pawlińska |
28.11.2013 |
SEMINARIUM ODWOŁANE
Rozszerzenia Haskella poza ML-polimorfizm (typy
egzystencjalne, rank-n polymorphism) |
[11, 21-23] |
|
|
Marek Zwonik |
05.12.2013 |
Seminarium przełożone na 09.01.2014
Phantom types, GADT's
|
[15, 24] |
|
|
Łukasz Tomaszewski |
12.12.2013 |
Programowanie z typami zależnymi w Agdzie (1) |
[16, 17, 25] |
Notatka
Kod, cz. 1
|
Lista zadań nr 7, cz. 1
|
Wojciech Jedynak |
19.12.2013 |
Programowanie z typami zależnymi w Agdzie (2) |
[17, 25] |
Kod, cz. 2
|
Lista zadań nr 7, cz. 2
|
Piotr Polesiuk |
09.01.2014 |
SEMINARIUM ODWOŁANE
|
|
|
|
|
16.01.2014 |
SEMINARIUM ODWOŁANE
Interpretery definiujące język programowania |
[8] |
|
|
Michał Maciejczyk |
23.01.2014 |
Multi-staged programming (partial
evaluation, code generation) |
[14] |
Slajdy
Kod
|
Lista zadań nr 8
|
Radosław Warzocha |
30.01.2014 |
Reaktywne programowanie funkcyjne |
|
|
Lista zadań nr 9
|
Rafał Łukaszewski |
|
Wymagania
Aby zaliczyć seminarium na ocenę pozytywną należy:
- być obecnym na co najmniej 10 spotkaniach
- opracować i przedstawić wybrany temat (50%)
- rozwiązać wybrane zadania przygotowane przez
pozostałych uczestników seminarium (50%).
Na opracowanie tematu składa się:
- przygotowanie prezentacji;
- przygotowanie dodatkowych materiałów w postaci
slajdów, notatek, implementacji, etc. i przesłanie ich
do prowadzącego nie później niż 3 dni po seminarium;
- przygotowanie zadania programistycznego (wraz z
rozwiązaniem) ilustrującego omawiany temat;
- ocena studenckich rozwiązań zaproponowanego zadania
(autor zadania ustala termin nadsyłania rozwiązań).
W ciągu semestru należy rozwiązać co najmniej 3 zadania
zaproponowane przez uczestników seminarium (nie licząc
własnego).
Prezentacja jest oceniana na podstawie zawartości
merytorycznej (80%) oraz formy (20%).
Porady na temat prezentacji naukowych:
- [D11]
Communication in Computer Science. Olivier Danvy. 4th Summer School on
Generative and Transformational Techniques in Software Engineering,
July 2011, Braga, Portugal.
- [PJLH93]
How to give a good research talk. Simon Peyton Jones,
John Launchbury, John Hughes. SIGPLAN Notices 28(11),
November 1993.
|
Literatura
- Why functional programming matters. John
Hughes. Research Topics in Functional Programming, ed. D. Turner,
Addison-Wesley, 1990, pp 17–42.
- The essence of functional programming. Philip
Wadler. Invited talk, 19'th Symposium on Principles of
Programming Languages, ACM Press, Albuquerque, January
1992.
- Comprehending monads. Philip Wadler. Mathematical
Structures in Computer Science, Special issue of
selected papers from 6'th Conference on Lisp and
Functional Programming, 2:461-493, 1992.
-
http://www.haskell.org/haskellwiki/All_About_Monads
-
Monad transformers and modular interpreters. Sheng
Liang, Paul Hudak, and Mark P. Jones. 22nd ACM
SIGPLAN-SIGACT Symposium on Principles of Programming
Languages, San Francisco, CA, January 1995.
- Imperative functional programming. Simon Peyton Jones
and Philip Wadler. 20'th Symposium on Principles of
Programming Languages, ACM Press, Charlotte, North
Carolina, January 1993.
- Monadic parser combinators. Graham Hutton, Erik
Meijer. Technical report NOTTCS-TR-96-4, Department of
Computer Science, University of Nottingham, 1996.
- Definitional interpreters for higher-order programming
languages. John C. Reynolds. Higher-Order and Symbolic
Computation, 11(4)363-397, 1998.
- How to make ad-hoc polymorphism less ad hoc. Philip
Wadler and Stephen Blott. 16'th Symposium on Principles
of Programming Languages, ACM Press, Austin, Texas,
January 1989.
-
http://www.haskell.org/haskellwiki/OOP_vs_type_classes
-
Practical type inference for arbitrary-rank types. Simon
Peyton Jones, Dimitrios Vytiniotis, Stephanie Weirich,
Mark Shields. Journal of Functional Programming, Volume
17 Issue 1, January 2007, pp. 1-82.
-
Generics for the masses. Ralf Hinze. Journal of
Functional Programming, Volume 16 Issue 4-5, July 2006,
pp. 451-483.
-
http://www.haskell.org/haskellwiki/Embedded_domain_specific_language
-
Multi-stage Programming (MSP)
-
http://www.haskell.org/haskellwiki/Generalised_algebraic_datatype
-
Why dependent types matter. Thorsten Altenkirch, Conor
McBride, and James McKinna. 2005.
-
Dependently typed programming in Agda. Ulf Norell and
James Chapman.
- Typing Haskell in Haskell. Mark P. Jones.
- Applicative Programming with Effects. Conor McBride and Ross Paterson. 2008.
- QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. Koen Claessen and John Hughes. 2000.
- Lazy functional state threads. Simon Peyton Jones and John Launchbury. 1994.
- http://www.haskell.org/haskellwiki/Existential_type
- http://www.haskell.org/haskellwiki/Rank-N_types
- Fun with phantom types. Ralf Hinze. 2003
- Dependent Types at Work. Ana Bove and Peter Dybjer.
|