Devo usar extensões GHC Haskell ou não?
Pergunta
À medida que estou aprendendo Haskell, vejo que há muitas extensões de idioma usado no código da vida real.Como iniciante, devo aprender a usá-los ou devo evitá-los a todo custo?Vejo que isso quebra a compatibilidade com Haskell 98 e limita o código apenas ao GHC.No entanto, se eu navegar pelos pacotes no Hackage, vejo que a maioria deles é apenas GHC.
Então, qual é a atitude da comunidade em relação ao uso de extensões linguísticas?
E se o uso de extensões for aceitável, como posso distinguir as extensões que posso usar “com segurança” (aquelas que provavelmente se tornarão parte do próximo padrão Haskell) daquelas que são em sua maioria “experimentais”?Por exemplo, suponho que -XDisambiguateRecordFields é bom e útil, mas é provável que tenha suporte no futuro?
Solução
Existem algumas extensões do GHC que são boas demais para viver sem.Entre os meus favoritos estão
- Classes de tipo multiparâmetro
- Variáveis de tipo com escopo
- Tipos de classificação superior
- Tipos de dados algébricos generalizados (GADTs)
Destes, o realmente essencial são as classes do tipo multiparâmetros.
Algumas extensões do GHC são muito especulativas e experimentais e você pode querer usá-las com cautela.Uma boa maneira de identificar uma extensão estável e confiável é ver se ela está prevista para inclusão no Haskell Prime, que se espera ser o sucessor do Haskell 98.
Apoio a sugestão de Don Stewart de que cada extensão deve ser marcada usando o LANGUAGE
pragma no arquivo de origem. Não habilite extensões usando opções de linha de comando.
Outras dicas
Sim, use extensões conforme apropriado.
Mas não se esqueça de habilitá -los intencionalmente - Somente quando você decide que precisa deles. Faça isso por módulo via {-# LANGUAGE Rank2Types #-}
(por exemplo).
De um modo geral, as pessoas usam extensões de GHC com bastante força, porque são muito úteis e Haskell 98 é bastante antigo. Uma vez que as pessoas padrão mais atualizadas podem fazer mais esforço para cumpri -lo.
Você pode encontrar o status das propostas para o próximo padrão aqui.
As outras respostas aqui são boas.Eu acrescentaria que as extensões do GHC não são tão vulneráveis no futuro (*) quanto poderiam ser, porque o GHC parece ser de longe o compilador Haskell mais popular, e não vejo isso mudando tão cedo.
(*) como o oposto de "à prova de futuro"