Eu era desenvolvedor Java há muito tempo, mas recentemente entrei para uma equipe da Haskell. No mundo java, se você tiver um projeto grande, com várias equipes trabalhando nele, uma abordagem comum é usar um servidor de artefato como o Maven para facilitar e acelerar o desenvolvimento. Várias ferramentas de construção, como Ant, Maven, Gradle, podem criar o projeto e fazer upload de um arquivo jar para o servidor de artefato que pode ser usado pelo restante da equipe sem problemas. Portanto, dividindo o projeto em subprojetos menores, o tempo de construção também é drasticamente reduzido.
No lado Haskell, estamos usando cabal
para construir o projeto. Nosso projeto leva de 10 a 15 minutos para ser desenvolvido sem otimização. Demora algumas horas se a otimização do compilador estiver ativada, o que é doloroso.
Eu me pergunto, como podemos fazer a mesma coisa que fazemos em Java aqui. Existe uma maneira fácil de compilar e fazer upload do binário dos pacotes (bibliotecas) em um servidor de artefato e usar os binários pré-criados no momento da construção? Eu sei que, como o Haskell gera código de máquina (em vez de código de bytes em Java), pode haver problemas de compatibilidade, mas provavelmente podemos ter binários diferentes para diferentes arquiteturas / SOs armazenados no servidor de artefato.
cabal
,GHC
,Test.Framework
ou o ligador.Respostas:
Você pode considerar usar o Nix , que é um gerenciador de pacotes de plataforma cruzada de uso geral e com suporte decente para Haskell.
O Nix possui uma linguagem de programação personalizada para definir pacotes (que por acaso é pura, funcional e preguiçosa). Definir novos pacotes e estender os existentes é muito fácil (por exemplo, alterar dependências, obter o código-fonte de um repositório git diferente etc.).
Os pacotes são identificados por hashes, que incluem dependências. Portanto, várias versões, ou a mesma versão com diferentes dependências, podem viver lado a lado sem conflito. O Nix pode procurar o hash desejado em um servidor de "cache binário", para ver se esse pacote específico com essas dependências específicas já foi construído; Nesse caso, ele fará o download do produto de compilação em vez de compilar.
Atualmente, o repositório nixpkgs inclui a maioria / toda a Hackage, várias versões do GHC (7.10.1, 7.8.4 e algumas infra-estruturas JS) e um
cabal2nix
utilitário que faz um bom trabalho ao gerar pacotes Nix a partir de arquivos .cabal. Há também o servidor de CI "hydra" baseado em Nix, que você pode usar para acionar compilações com base em confirmações de SCM.fonte