Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Teoria das categorias na prática com as mônadas Either e Maybe/Option

Teoria das categorias na prática com as mônadas Either e Maybe/Option

Vitor Luiz Cavalcanti

July 16, 2020
Tweet

More Decks by Vitor Luiz Cavalcanti

Other Decks in Technology

Transcript

  1. Oi Vitor Luiz Cavalcanti Vocês me acham como @VitorLuizC no

    Twitter, GitHub e Telegram. 2 ⬡ Mantenedor de +30 libs e plugins ⬡ Organizador do TypeScript Brasil ⬡ Engenheiro Desenvolvedor Front-End ⬡ Entusiasta de Programação Funcional
  2. Teoria das Categorias ⬡ Generalização de Álgebra de Funções. ⬡

    Constituída de Categorias, que são estruturas abstratas constituídas de objetos e setas. Onde a propriedade fundamental é a composicionalidade das setas. 4
  3. Álgebra de Funções 5 Estudo das equações e operações com

    funções. g + h → (x) = g(x) + h(x) g ∙ h → (x) = g(x) ∙ h(x) g ◦ h → (x) = g(h(x))
  4. “Teoria das Categorias pode ser considerada como uma formalização adequada

    para tratar propriedades abstratas independentes de estruturas. 6
  5. Por que usar isso em ciência da computação? Independência de

    Implementação Permite que a gente trate objetos e setas como dados e funções. Comparação de Expressividade de Formalismos Categorias podem transformar uma estrutura em outra, e conseguimos avaliar a expressividade que a gente ganha ou perde. 7 Notação Gráfica Conseguimos expressar graficamente as equações. Expressividade de suas Construções É a grande e real vantagem da Teoria das Categorias na computação. Herança de Resultados Categorias podem ser compostas de outras categorias. E podem herdar os resultados provados nelas.
  6. Expressividade & Formalismos - O desenvolvimento é limitado pela nossa

    capacidade de expressar os problemas e as soluções. - Categorias têm expressões formais. - O RegExp é um exemplo de formalismo. 8
  7. 10 Functor Alt Bifunctor Apply Extend Profunctor Traversable Foldable Contravariant

    Semigroupoid Filterable Semigroup Setoid Category Monoid Ord Group Plus Applicative Chain Comonad Alternative Monad ChainRec
  8. 11 Functor Alt Bifunctor Apply Extend Profunctor Traversable Foldable Contravariant

    Semigroupoid Filterable Semigroup Setoid Category Monoid Ord Group Plus Applicative Chain Comonad Alternative Monad ChainRec
  9. Functor Categoria "primordial" da composição que define o pode ser

    transformado mantendo a estrutura com o método map. Functor<T>.map<U>(fn: (value: T) => U): Functor<U> 12
  10. Apply Estende o Functor e implenta o método ap. O

    ap é similar ao map, mas a função de transformação é encapsulada por um Apply. Apply<T>.ap<U>(fn: Apply<(value: T) => U>): Apply<U> 13
  11. Applicative Estende o Apply e implementa um método estático, o

    of. O of é uma função construtora de Applicatives. Applicative.of<T>(value: T): Applicative<U> 14
  12. Chain Estende o Apply e implementa o método chain (que

    pode ser chamado de fmap*, bind e flatMap). O chain é similar ao map, mas retorna um Chain com o resultado. Chain<T>.chain<U>(fn: (value: T) => Chain<U>): Chain<U> 15
  13. Alt Estende o Functor e implementa o método alt. O

    método alt recebe uma função que retorna um Alt com um valor pro caso "à esquerda" da estrutura. Applicative<T>.alt(fn: () => Alt<T>): Alt<T> 17
  14. Foldable Implementa o método fold (ou reduce), um método destrutor

    que constrói outros dados a partir da iteração da estrutura Foldable. Foldable<T>.reduce<U>(fn: (value: T) => U, initial: U): U 18
  15. Onde aprender mais? (1/2) ⬡ Fantasy Land Specification ⬡ Professor

    Frisby's Mostly Adequate Guide to Functional Programming ⬡ Category Theory for Programmers - Bartosz Milewski's (não oficial) 19
  16. Onde aprender mais? (2/2) ⬡ Teoria das Categorias - Para

    a Ciência da Computação ⬡ Fantas, Eel, and Specification - Tom Harding 20