Algumas desvantagens posso pensar:
- Devido à natureza da linguagem e suas raízes firmes no mundo acadêmico, a comunidade é muito voltada para a matemática; Se você é uma pessoa pragmática, às vezes isso pode ser esmagador, e se você não fala o jargão, terá mais dificuldade do que com muitas outras línguas.
- Embora exista uma incrível riqueza de bibliotecas, a documentação é frequentemente concisa.
- Os tutoriais de nível de entrada são poucos e difíceis de encontrar, por isso a curva de aprendizado inicial é bastante íngreme.
- Alguns recursos de idioma são desnecessariamente desajeitados; um exemplo proeminente é como a sintaxe de registro não introduz um escopo de nomenclatura, portanto, não há como ter o mesmo nome de campo de registro em dois tipos diferentes dentro do mesmo espaço de nome de módulo.
- O Haskell é padronizado para avaliação preguiçosa, e embora isso seja uma grande coisa, ele pode te atacar de maneira desagradável às vezes. Usar a avaliação preguiçosa ingenuamente em situações não triviais pode levar a gargalos desnecessários de desempenho, e entender o que está acontecendo sob o capô não é exatamente direto. A avaliação preguiçosa (especialmente combinada com a pureza e um compilador que otimiza agressivamente) também significa que você não pode raciocinar facilmente sobre a ordem de execução; na verdade, você nem sabe se determinado código realmente é avaliado em uma determinada situação. Conseqüentemente, a depuração do código do Haskell requer uma mentalidade diferente, apenas porque percorrer seu código é menos útil e menos significativo.
- Por causa da pureza de Haskell, você não pode usar efeitos colaterais para fazer coisas como E / S; você tem que usar uma avaliação preguiçosa de mónadas e 'abuso' para conseguir interatividade, e você tem que arrastar o contexto monádico para qualquer lugar que você queira fazer I / O. (Este é realmente um bom recurso em muitos aspectos, mas torna a codificação pragmática impossível às vezes.)