Se busca que les estudiantes:
● Aprenda un abanico de técnicas y prácticas modernas sobre el desarrollo de software en lenguajes de programación puramente funcionales y avanzados.
● Pueda utilizar herramientas de sistemas de tipos avanzados, principalmente de lenguajes de programación funcionales.
● Aprenda a diseñar software mediante un análisis basado en las propiedades de los tipos de datos que el programa manipula.
● Comprenda la relevancia de las propiedades matemáticas de los datos y funciones en el diseño de software.

Modos de Cursada: Cuatrimestral Presencial

Horas Semanales: 4 horas

Demanda de tiempo en casa semanal: 4 horas

Sitio web: Aún no disponible

Programa de la materia:

Contenidos Mínimos:
● Tipos algebraicos, polimorfismo paramétrico, alto orden, typeclasses. Lazy evaluation, memoization.
● Sistema de tipos Hindley–Milner y variantes más avanzadas. Recursión polimórfica. Rank-N Types. Nociones básicas sobre sistemas de tipos dependientes.
● Técnicas funcionales de parsing. Parsing combinators, parsing mónadico.
● Tipos de recursión. Fold, unfold. Anamorfismos, catamorfismos, hilomorfismos. Fixed-point combinator.
● Estructuras algebraicas. Functors, Applicative Functors, Mónadas, Arrows, Lenses. Monad Transformers, Free monads, F-Algebras.
● Programación funcional reactiva y su uso en el diseño de interfaces gráficas.
● Testing automatizado mediante pruebas aleatorias sobre propiedades (Quickcheck).