Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Haskell
Haskell Forum d'entraide sur la programmation en langage fonctionnel Haskell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/02/2010, 23h46   #1
limestrael
Nouveau Membre du Club
 
Avatar de limestrael
 
Inscription : juin 2009
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 86
Points : 30
Points : 30
Par défaut Cabal et développement

J'aurais deux questions très liées :

Question 1: Cabal est un bon outil pour installer/distribuer ses packages, mais je voulais savoir, lors du développement d'un projet en Haskell, utilisez-vous cabal pour vos compilations répétées ou bien compilez-vous à la main avec ghc --make ?

Question 2: Actuellement, je bosse sur le binding d'une librairie appelée SFML (plus précisément son binding C CSFML, si certains connaissent). Il s'agit d'une SDL-like (mais en mieux).
Je progresse ainsi dans mon développement : j'ai un exécutable de test, que j'étoffe un peu à chaque fois que je rajoute quelques fonctionnalités à mon binding, de manière à les utiliser vite fait. Actuellement j'ai un script shell qui compile ma lib, et un autre mon exécutable, méthode que je trouve un peu crade au vu de l'existence de cabal.
Auriez-vous une meilleure façon de procéder pratique pour le développement ? Via cabal-install ?
Le truc est que si je compile la lib à coup de 'cabal build' mon exécutable ne peut pas la trouver quand je fais 'ghc --make testHSFML.hs', pourtant cabal m'indique bien à la fin du build: "Registering HSFML-1.5..."
Je suis obligé de 'cabal install' ma lib, et je vais évidemment pas le faire à chaque modif dans le code.
Je n'arrive également pas à rajouter mon exécutable au .cabal. J'ai l'erreur suivante au configure si j'indique HSFML dans ses dépendances :
Citation:
cabal: internal error: could not construct a valid install plan.
The proposed (invalid) plan contained the following problems:
The following packages are involved in a dependency cycle HSFML-1.5
Il n'aime pas que l'exécutable du .cabal dépende de la lib qui est dans le même .cabal, on dirait. Mais le truc est que si je n'indique pas cette dépendance, au build j'ai :
Citation:
Could not find module `SFML.Direct.Types.Enums':
It is a member of the hidden package `HSFML-1.5'.
Perhaps you need to add `HSFML' to the build-depends in your .cabal file.
it is a hidden module in the package `HSFML-1.5'
Je pourrais faire 2 packages, mais pour le développement ça va être chiant...

J'utilise le Build-Type 'Simple', c'est peut-être ça qui ne va pas, je ne sais pas.
limestrael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 18h31   #2
limestrael
Nouveau Membre du Club
 
Avatar de limestrael
 
Inscription : juin 2009
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 86
Points : 30
Points : 30
Bon, j'ai pu trouver une réponse (partielle ?) à ma question 2:

Dans mon .cabal, je ne mets que la librairie, pas mon main de test. Je 'cabal configure' une fois et 'cabal installe' à chaque modif du code de la lib.
Ensuite, cabal génère dans un fichier dist/package.conf.inplace contenant les infos sur le package juste compilé (ça doit être à ça que correspond le 'Registering HSFML-1.5...').
Après, il faut indiquer l'existence de ce fichier à GHC lorsque je tente de compiler mon main :
ghc --make -package-conf dist/package.conf.inplace main.hs
Au passage, il ne faut pas exécuter ce code dans le dossier où se trouve le dossier racine du code du package (usuellement également le dossier où se trouve le .cabal), car sinon GHC va trouver le code et non la librairie déjà compilée via cabal, et va recompiler toute la librairie.

C'est la seule façon pratique de faire que j'ai trouvée. Le truc est que je ne sais pas si je dois vraiment procéder comme ça (je n'ai rien vu sur le net disant de faire comme ça, par exemple).

A part ça, je n'arrive toujours pas à avoir une lib et un exécutable en dépendant dans le même .cabal...
limestrael est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h55.


 
 
 
 
Partenaires

Hébergement Web