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).