Zaawansowane programowanie funkcyjne (seminarium), II UWr, 2013/14

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:
  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ż 3 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:
  • [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

  1. Why functional programming matters. John Hughes. Research Topics in Functional Programming, ed. D. Turner, Addison-Wesley, 1990, pp 17–42.
  2. The essence of functional programming. Philip Wadler. Invited talk, 19'th Symposium on Principles of Programming Languages, ACM Press, Albuquerque, January 1992.
  3. 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.
  4. http://www.haskell.org/haskellwiki/All_About_Monads
  5. 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.
  6. Imperative functional programming. Simon Peyton Jones and Philip Wadler. 20'th Symposium on Principles of Programming Languages, ACM Press, Charlotte, North Carolina, January 1993.
  7. Monadic parser combinators. Graham Hutton, Erik Meijer. Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996.
  8. Definitional interpreters for higher-order programming languages. John C. Reynolds. Higher-Order and Symbolic Computation, 11(4)363-397, 1998.
  9. 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.
  10. http://www.haskell.org/haskellwiki/OOP_vs_type_classes
  11. 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.
  12. Generics for the masses. Ralf Hinze. Journal of Functional Programming, Volume 16 Issue 4-5, July 2006, pp. 451-483.
  13. http://www.haskell.org/haskellwiki/Embedded_domain_specific_language
  14. Multi-stage Programming (MSP)
  15. http://www.haskell.org/haskellwiki/Generalised_algebraic_datatype
  16. Why dependent types matter. Thorsten Altenkirch, Conor McBride, and James McKinna. 2005.
  17. Dependently typed programming in Agda. Ulf Norell and James Chapman.
  18. Typing Haskell in Haskell. Mark P. Jones.
  19. Applicative Programming with Effects. Conor McBride and Ross Paterson. 2008.
  20. QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. Koen Claessen and John Hughes. 2000.
  21. Lazy functional state threads. Simon Peyton Jones and John Launchbury. 1994.
  22. http://www.haskell.org/haskellwiki/Existential_type
  23. http://www.haskell.org/haskellwiki/Rank-N_types
  24. Fun with phantom types. Ralf Hinze. 2003
  25. Dependent Types at Work. Ana Bove and Peter Dybjer.
http://www.ii.uni.wroc.pl/~dabi