|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
Bonjour à tous,
je reviens ici après un long temps d'absence. J'ai un nouveau projet, que je compte faire en Haskell (j'ai programmé précédemment en OCaml). Pour cela, j'ai besoin d'utiliser Yaml, via un module que je trouvé sur HackageDB, à savoir data-object-yaml contexte : Je suis sous Windows, j'ai installé la plateforme pour Windows, et testé avec succès : GHCi, runHaskell, cabal ce que j'ai fait : ce que j'ai obtenu tout ok apparemment : la commande ghc-pkg me renvoie : Code :
ben, je suppose que c'est un truc idiot qui bloque, mais : - GHCi : me renvoie : Code :
avec me renvoie ... rien, il tourne indéfiniment ... ce que j'ai consulté sans succès realworldhaskell et learnyouahaskell.com sans oublier Google, qui cette fois, n'a pas été mon ami ... => svp, quelqu'un peut me mettre sur la piste ? |
||||
|
|
00
|
|
|
#2 | ||||
![]() ![]() Inscription : juin 2005 Messages : 8 586 ![]() |
Et en essayant avec :
Code :
Ou plus généralement, pour ton projet, tu fais ton import en haut et avec ghc, cette fois j'en suis sûr y'a une option -package, donc tu peux faire : Code :
__________________
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++ Le guide pour bien débuter en C++ |
||||
|
00
|
|
|
#3 | |||||||||||||||||
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
Citation:
En fait, aujourd'hui, j'ai bien progressé. ce qui ne marchait par hier fonctionne aujourd'hui. Entre temps, je n'ai fait qu'éteindre et allumer l'ordi. Donc je suppose qu'un fichier de configuration s'est mis à jour dans ce processus. Donc la solution, c'est de tout fermer et tout relancer après un cabal install. Il doit y avoir plus joli, mais ça ira pour l'instant. Néanmoins, toujours bloqué,mais un peu plus loin : 1. ce qui marche maintenant dans GHCi : Code :
Code :
Prelude Data.List Data.Object Data.Object.Yaml> puis : renvoie : Code :
puis un : Code :
Prelude Data.List Data.Object Data.Object.Yaml> Scalar 1 Code :
et ainsi de suite : Code :
Mapping [("fj",Scalar 3),("ghkhk",Scalar 5)]
il y a un runtest fourni avec mon package data-object-yaml-0.3.3.1.tar.gz : Code :
au diable le runtest, ce qui m'intéresse, c'est la fonction decodeFile Code - **en gras, la fonction decodeFile** :
hélas, dans GHCi : Code :
|
|||||||||||||||||
|
|
00
|
|
|
#4 | ||
![]() ![]() Inscription : juin 2005 Messages : 8 586 ![]() |
Pour le premier soucis, il te suffit d'installer HUnit. Le *test* dépend de HUnit, mais pas la lib, donc ça ne te force pas à l'installer quand t'installes la lib. Par contre c'est indispensable pour le test. Donc un cabal install HUnit devrait régler le soucis.
Le deuxième soucis est du au fait que, étant donnée la signature de decodeFile : Code :
(ici : http://hackage.haskell.org/packages/...html#t:Failure ) Donc quand on fait : Ca nous oblige à ce que le "m" de la signature de decodeFile soit IO d'après ce que tu peux voir sur le lien sur le module Control.Failure. Or dans ton appel, rien ne contraint cela d'où l'erreur, je pense. Bosse dans un fichier, en explicitant les signatures et surtout en remplaçant le "m" par IO, et charge ça dans ghci via :l, et tout devrait aller très bien.
__________________
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++ Le guide pour bien débuter en C++ |
||
|
00
|
|
|
#5 | |||||||
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
Citation:
Je bloque encore, un peu plus loin : Code :
Code :
pas davantage de succès avec ghc --make Code :
quant à la suite de ton message, ça vole très haut pour moi, misérable ver de terre dans le monde Haskell, loin d'avoir tout compris aux monads ... je creuse, je creuse, mais pas encore très vif le misérable ver de terre ... |
|||||||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : juin 2005 Messages : 8 586 ![]() |
Pour l'erreur que tu as liée aux regex, je crois qu'il te manque la bibliothèque C correspondant à la bibliothèque de regex utilisée par le package haskell que tu utilises. Je ne sais pas exactement laquelle c'est, mais il faut que tu trouves et que tu la mette à dispo de ghc dans un coin de ton Windows, et tu peux spécifier tout ça via les options --extra-lib-dirs et --extra-include-dirs quand il y a besoin.
Pour la deuxième partie, oui c'est compliqué, mais déjà familiarise toi un peu plus avec les monades et ça ira mieux. Tu comprendras l'essentiel : il faut que m soit IO dans la signature de decodeFile.
__________________
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++ Le guide pour bien débuter en C++ |
|
00
|
|
|
#7 | |||||
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
Citation:
Bon, un peu au pif, après quelques tatonnements : ça marche !!! Code :
Code :
maintenant j'espère pouvoir jouer avec ... le m'enquiquine et en tous cas, un grand merci Alp ! |
|||||
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
|
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : juin 2005 Messages : 8 586 ![]() |
Si y'en a un qui passe par là il le fera
Content que ton soucis soit résolu, hésite pas à repasser si t'as d'autres questions. (ou à venir sur #haskell.fr sur irc.freenode.net
__________________
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++ Le guide pour bien débuter en C++ |
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2002 Messages : 36 ![]() |
Tout de même, cette signature en IO (IO .... ) je la trouve tordue.
D'après Control.Failure, le m peut être aussi [] ou Maybe, je me demande ci ce n'est pas plus approprié. |
|
|
00
|
|
|
#11 | |||
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#12 | |||||
|
Nouveau Membre du Club
![]() Inscription : octobre 2002 Messages : 36 ![]() |
Citation:
Il explique que l'intérêt est de proposer un moyen générique(généralisé) de traiter les erreurs. Selon les propriétés du type interne utilisé, on peut probablement faire quelque chose de différent. Dans le cas de decodeFile, tout ca me paraît relever du bazooka logiciel, parce qu'on a le choix entre: (rappel) Code :
(Failure ParseException m, IsYamlScalar k, IsYamlScalar v) => FilePath -> IO (m (Object k v)) 1. Code :
(IsYamlScalar k, IsYamlScalar v) => FilePath -> IO (IO (Object k v)) Code :
(IsYamlScalar k, IsYamlScalar v) => FilePath -> IO (Maybe (Object k v)) Code :
(IsYamlScalar k, IsYamlScalar v) => FilePath -> IO ([Object k v]) 1. En cas d'erreur, une exception sera générée, à intercepter par catch, handle, ou une fonction du genre. 2. En cas d'erreur, on récupère Nothing, sinon Just obj -- obj étant l'objet décodé. 3. En cas d'erreur, on récupère [], sinon [obj] -- obj étant l'objet décodé. (ici, dans une liste d'un seul élémént) Note, dans le cas 1, on peut remplacer Code :
A mon avis dans ton cas le mieux est de faire avec Maybe: Code :
|
|||||
|
|
00
|
|
|
#13 | ||||||||
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
Citation:
Citation:
Code :
mais ça fonctionne avec Code :
merci pour l'astuce |
||||||||
|
|
00
|
|
|
#14 | ||
|
Membre du Club
![]() Inscription : mai 2005 Messages : 130 ![]() |
Et même un peu plus simple :
Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com