Attualmente sto provando a fare un progetto Haskell usando la metodologia Test Driven Development. In Java, possiamo creare un progetto ben strutturato contenente le cartelle src e bin, poi ci sono le cartelle principali e di test per il test delle unità con JUnit. Mi stavo solo chiedendo c'è un modo standard per ottenere una tale struttura in Haskell? Una cartella per l'origine di una cartella per binario e nella cartella di origine due cartelle una per testarne una per l'origine principale.Come strutturare un progetto Haskell?
risposta
La risposta moderna a questo è usare The Haskell Tool Stack. Questo strutturerà il progetto per te usando le impostazioni predefinite sane.
Il mio riferimento è sempre Structure of a Haskell project e How to write a Haskell program che spiegano alcuni valori predefiniti che la comunità sembra più o meno seguire. Ha funzionato bene per me finora ma i miei progetti non sono stati ancora molto grandi.
Ciò che è suggerito in Structure of a Haskell project suona simile a quello che hai delineato nel tuo post con alcune piccole modifiche come la cartella di test si trova nella stessa directory della cartella src.
Edit:
cabal init
genererà una quantità minima per voi tra cui il file cabala con dipendenze rilevanti se si dispone di tutti i file con le importazioni, almeno. È un ottimo inizio, ma solo una parte di ciò che stai cercando.
Idealmente come un progetto cresce il file cabale e la gerarchia di directory verrebbe automaticamente aggiornata, non sono a conoscenza di alcun strumento reso pubblico che lo farà comunque. È sulla mia lista forse un giorno, come sono sicuro che sia per molti altri.
-odir
e -hidir
possono essere utilizzati con ghc per inserire i file * .o e * .hi in directory separate. Si può leggere di più in GHC user guide's section on separate compilation)
Edit2:
Altri importanti messaggi sovrapposti /:
- 1. Come strutturare un progetto JavaScript usando RequireJS
- 2. Come strutturare il progetto Node/Angular/Socket.io?
- 3. Come strutturare il repository git per un progetto client-server
- 4. Integrazione di Heroku e Github (come strutturare il progetto)
- 5. Come strutturare l'app in purescript
- 6. Includere sorgenti C++ in un progetto Haskell
- 7. Come strutturare mobx
- 8. Come utilizzare una DLL in un progetto Haskell?
- 9. Come strutturare un progetto dnx di asp.net 5 con unit test in Visual Studio Code?
- 10. come strutturare app.configure in veloce
- 11. Come strutturare i progetti dipendenti su github?
- 12. Come strutturare TDD in Node.js?
- 13. Come strutturare i file wiki di GitHub?
- 14. Come strutturare i repository di Subversion
- 15. Come strutturare le librerie in Elm?
- 16. Come strutturare un'app Symfony2 con ESI?
- 17. Come strutturare un repository composto da diverse librerie e applicazioni
- 18. Organizzazione di attività ausiliarie per un progetto Haskell
- 19. Come strutturare il mio progetto ASP.NET MVC 2 con Aree sensibilmente
- 20. Strutturare l'ereditarietà in C++
- 21. Come strutturare le autorizzazioni utente per un cms
- 22. Come strutturare un'applicazione scritta in un linguaggio funzionale?
- 23. Come strutturare meglio un array di array in JSON
- 24. Come si dovrebbe strutturare il file xml?
- 25. Come strutturare il mio programma Perl CGI?
- 26. Come strutturare la gerarchia delle risorse REST?
- 27. Come strutturare il mio codice javascript/jquery?
- 28. Web MVC: come strutturare il livello Modello?
- 29. Come strutturare le classi in PHP
- 30. Come strutturare un'API RESTful con Spray.io?
Grazie per la risposta. In java, posso usare Maven per generare automaticamente tutte le cartelle necessarie e in ruby on rails il comando "rails new ProjectName" farà lo stesso, sto solo pensando poiché questa è un'attività comune, forse c'è un comando in Haskell questo fa – HHC
Anche quando si usa ghc per compilare un file .hs, qual è il modo migliore per compilare e lasciare tutti i file .hs in una cartella tutti i file intermedi (.o .hi ecc.) In un'altra cartella e il file di esecuzione in ancora un'altra cartella? – HHC
Commento modificato per una risposta poiché era longevo e ha beneficiato della formattazione. – Davorak