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:
Quais outros ramos da matemática são importantes para uma forte compreensão do sistema de tipos de Haskell?
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.
ST
mô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.Respostas:
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
Maybe
categoria[]
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.
fonte