Zaawansowane programowanie funkcyjne (seminarium), II UWr, 2014/15

Zaawansowane programowanie funkcyjne

Semestr letni 2014/15
Dariusz Biernacki
Środa 14:15-16:00
Sala 5
3 ECTS
http://www.ii.uni.wroc.pl/~dabi/courses/ZPF15/

Tematem seminarium jest przegląd zaawansowanych cech języków funkcyjnych, a także technik programowania wykorzystujących te cechy. Przedstawione zostaną m. in. takie zagadnienia jak:

  • Monady i transformatory monad
  • Kontynuacje
  • Transformacje programów
  • Klasy typów
  • Algebra programów funkcyjnych
  • Polimorfizm wyższego stopnia (higher-rank polymorphism)
  • Uogólnione algebraiczne typy danych (GADT's)
  • Typy zależne
  • Metaprogramowanie (programowanie wieloetapowe, ewaluacja częściowa)
  • Programowanie reaktywne

Terminarz

Data Temat Literatura Notatki Zadania Prelegent
25.02.2015 Spotkanie organizacyjne Danvy 2011, Peyton Jones et al. 1993, Hughes 1990
04.03.2015 Monady w programowaniu funkcyjnym Wadler 1992, All About Monads Slajdy Zadania Patryk Kajdas
11.03.2015 Interpretery definiujące język programowania Reynolds 1998, Ager et al. 2003 Slajdy
Implementacja
Zadania Krzysztof Wróbel
18.03.2015 Typy fantomowe Hinze 2003 Slajdy
Kod
Zadania Marcin Kaczmarek
25.03.2015 GADT, typy egzystencjalne i polimorfizm wyższego rzędu GADT, Existential type, Rank-N types Slajdy Zadanie Rafał Łasocha
01.04.2015 Programowanie funkcyjne z typami zależnymi Idris tutorial, Brady 2013 Slajdy
Kod
Zadania Łukasz Hanuszczak
15.04.2015 Moduły a klasy typów Wadler & Blott 1989, Wehr & Chakravarty 2008 Slajdy Zadania
Kod
Bartosz Zasieczny
22.04.2015 Obliczenia równoległe w Haskellu Marlow 2013 Slajdy Zadania Marek Imiełowski
29.04.2015 Programowanie wieloetapowe Taha 2003, Taha 2007 Slajdy Zadanie Maciej Jaromin
13.05.2015 Reaktywne programowanie funkcyjne Elm Slajdy Zadanie Mateusz Kołaczek
20.05.2015 Algebra programów funkcyjnych Meijer et al. 1991 Slajdy Zadania Filip Pawlak
27.05.2015 Towards internet of code Slajdy Zadanie Łukasz Dąbek
03.06.2015 O algebraicznej semantyce nawrotów i cięcia (wykład gościnny) Zadania Maciej Piróg
10.06.2015 Zipper Huet 1997 Slajdy Zadanie Dariusz Bukowski
10.06.2015 Funktory aplikatywne McBride & Paterson 2008 Slajdy Zadania Sebastian Cielemęcki

Literatura

  • [Hughes 1990] Why functional programming matters. John Hughes. Research Topics in Functional Programming, ed. D. Turner, Addison-Wesley, 1990, pp 17–42.
  • [Wadler 1992] The essence of functional programming. Philip Wadler. Invited talk, 19'th Symposium on Principles of Programming Languages, ACM Press, Albuquerque, January 1992.
  • [Brady 2013] Idris, a General Purpose Dependently Typed Programming Language: Design and Implementation, Edwin Brady, Journal of Functional Programming, August 2013.
  • [Ager et al. 2003] A Functional Correspondence between Evaluators and Abstract Machines. Mads Sig Ager, Dariusz Biernacki, Olivier Danvy and Jan Midtgaard. In D. Miller, editor, Proceedings of the 5th ACM-SIGPLAN International Conference on Principles and Practice of Declarative Programming (PPDP 2003), pp. 8-19, Uppsala, Sweden, August 2003. ACM Press.
  • [Reynolds 1998] Definitional interpreters for higher-order programming languages. John C. Reynolds. Higher-Order and Symbolic Computation, 11(4)363-397, 1998.
  • [Hinze 2003] Fun with phantom types. Ralf Hinze. 2003
  • [Wadler & Blott 1989] 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.
  • [Kiselyov et al. 2005] Backtracking, interleaving, and terminating monad transformers. Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry. 2005.
  • [Taha 2003] A Gentle Introduction to Multi-stage Programming. Walid Taha. Domain-Specific Program Generation 2003: 30-50.
  • [Taha 2007] A Gentle Introduction to Multi-stage Programming, Part II. Walid Taha. GTTSE 2007: 260-290.
  • [Meijer et al. 1991] Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire. Erik Meijer, Maarten M. Fokkinga, Ross Paterson. FPCA 1991: 124-144.
  • [Wehr & Chakravarty 2008] ML Modules and Haskell Type Classes: A Constructive Comparison. Stefan Wehr, Manuel M. T. Chakravarty. APLAS 2008: 188-204.
  • Perełki programowania funkcyjnego.
  • Lista publikacji Richarda Birda.
  • Publikacje Ralfa Hinze.
  • [Huet 1997] The Zipper. Gerard Huet. JFP 7(5):549-554, 1997.
  • [McBride & Paterson 2008] Applicative programming with effects. Conor McBride, Ross Paterson. J. Funct. Program. 18(1): 1-13, 2008.

Wymagania

Aby zaliczyć seminarium na ocenę pozytywną należy:
  1. być obecnym na co najmniej 10 spotkaniach
  2. opracować i przedstawić wybrany temat (50%)
  3. rozwiązać wybrane zadania przygotowane przez pozostałych uczestników seminarium (50%).
Na opracowanie tematu składa się:
  1. przygotowanie prezentacji;
  2. przygotowanie dodatkowych materiałów w postaci slajdów, notatek, implementacji, etc. i przesłanie ich do prowadzącego nie później niż 4 dni po seminarium;
  3. przygotowanie zadania programistycznego (wraz z rozwiązaniem) ilustrującego omawiany temat;
  4. 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:
  • [Danvy 2011] Communication in Computer Science. Olivier Danvy. 4th Summer School on Generative and Transformational Techniques in Software Engineering, July 2011, Braga, Portugal.
  • [Peyton Jones et al. 1993] How to give a good research talk. Simon Peyton Jones, John Launchbury, John Hughes. SIGPLAN Notices 28(11), November 1993.

Oceny

http://www.ii.uni.wroc.pl/~dabi