A matemática precisava entender a teoria por trás do sistema de tipos de Haskell?

9

Recentemente, fiquei profundamente interessado em Haskell.

Enquanto tentava aprender novos conceitos (por exemplo, a palavra - chave forall e a mônada ST ) e o sistema de tipos de Haskell em geral, eu sempre me deparo com conceitos da teoria das categorias e do cálculo lambda . Então, eu me pergunto:

  1. Quais outros ramos da matemática são importantes para uma forte compreensão do sistema de tipos de Haskell?

  2. Posso renunciar a um estudo rigoroso dessas matemáticas e, em vez disso, focar em certos conceitos pertinentes? (por exemplo, quantificadores no cálculo lambda.) Em caso afirmativo, quais conceitos são essenciais?

Espero buscar os Tipos e os idiomas de programação em breve, no entanto, sugira quaisquer recursos de leitura alternativos que julgar adequados.

Roubar
fonte
4
O material da teoria da categoria não é essencial para conhecer e trabalhar com Haskell, mas pode ajudar com alguns conceitos fundamentais. O único ramo real da matemática para entender essas coisas é a teoria da categoria, não só está enraizada lá, mas você encontrará pouca dependência de outras matemáticas, é uma área muito isolada dessa maneira. Escolha o cálculo Lambda e estude os diferentes sistemas de tipos associados a diferentes variáveis ​​lambda; além disso, leia esta resposta do SO e leia sobre a teoria das categorias.
Jimmy Hoffa
3
Eu não ficaria tão envolvido com o domínio do sistema de tipos subjacente. Pelo menos não deixe que o conhecimento de tudo o impeça de concluir alguns projetos. A conclusão de alguns projetos simples em Haskell me permitiu ver a beleza matemática por trás disso e me levou a entendê-la.
precisa saber é o seguinte
2
@ChaosPandion Concordo com esse ponto de vista, mas estou trabalhando em um projeto que pode exigir a escrita de código na STmônada. É complicado escrever código que será compilado quando eu não entender todas as assinaturas de tipo relevantes, então achei que seria melhor melhorar meu entendimento do sistema de tipos.
Rob
3
@robjb - Eu certamente concordo com você que uma compreensão mais profunda é prudente. Honestamente, meu comentário foi direcionado mais para o público em geral, que pode achar Haskell muito intimidador para tentar.
ChaosPandion

Respostas:

11

Não, você não precisa pegar um livro sobre teoria das categorias para entender Haskell.

Eu uso Haskell há alguns anos, e aprendi algumas teorias de categorias por curiosidade, isso realmente não é necessário. Por um lado, é legal ver como todas essas abstrações se encaixam no "quadro geral", mas eu não disse "Oh meu Deus, eu só preciso fazer disso um profunctor da Maybecategoria []es e então eu posso salvar o Princesa!".

Agora, dependendo do que você está fazendo com a teoria do tipo Haskell, está em cima do muro.

Se você está apenas aprendendo haskell , não tente entender todas as nuances do sistema de tipos . Por favor, não, é como tentar aprender a meta-programação de modelos C ++ primeiro. Tipos sofisticados são excelentes ferramentas, mas ter um bom entendimento da programação funcional é melhor do que o polimorfismo impredicativo.

Agora, digamos que, após um ou dois anos de Haskell, você esteja procurando entender cada parte sutil de como o sistema de tipos de Haskell funciona, então sim, alguma teoria de tipos pode ser útil.

Isso ajudará você a entender algumas das lógicas por trás de como as coisas funcionam, além de ser um ramo muito legal da IMO da ciência da computação que vale a pena examinar. Você pode escolher as partes que mais interessa e ainda aprender uma quantidade decente.

Para Haskell, olhando para STLC, sistemas tipo HM (Sistema F) e talvez o cubo lambda (Haskell é System Fw iirc) e tipos iso-recursivos. Tipos e linguagens de programação é um ótimo recurso para começar e abrange tudo isso e muito mais.

Se você realmente quer beber o refresco e descobrir que é um teórico do tipo emergente, cutuque a Agda ou a Coq. Eles apresentam "tipos dependentes", um passo adiante no cubo lambda que Haskell. Tipos dependentes permitem que os tipos dependam dos termos. Isso significa que os tipos são poderosos o suficiente para realmente provar teoremas. Para os curiosos, o "isomorfismo de curry howard" no Google deve trazer alguns resultados interessantes.

Daniel Gratzer
fonte
Uma breve descrição da Agda e da Coq seria útil.
precisa saber é o seguinte
@ChaosPandion Atualizado
Daniel Gratzer
Isso parece bom. Imaginei dizer que os nomes não serão suficientes para despertar os interesses de muitas pessoas.
precisa saber é o seguinte