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 01/07/2010, 14h02   #1
Antoine_935
Membre Expert
 
Avatar de Antoine_935
 
Antoine d'Otreppe
Développeur web/mobile
Inscription : juillet 2006
Messages : 883
Détails du profil
Informations personnelles :
Nom : Antoine d'Otreppe
Localisation : Belgique

Informations professionnelles :
Activité : Développeur web/mobile

Informations forums :
Inscription : juillet 2006
Messages : 883
Points : 1 038
Points : 1 038
Envoyer un message via MSN à Antoine_935
Par défaut instance declaration for (Num CustomerID)

Salut à toutes et à tous !

Vous l'aurez peut-être déjà deviné au titre, je débute en Haskell (soit dit au passage j'adore déjà !).
Alors que je m'amusais avec les structures de données, voici que ghci me fait une petite surprise. Voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
data BookInfo = Book Int String [String]
                deriving (Show)

data MagazineInfo = Magazine Int String [String]
                    deriving (Show)

data CustomerID = CustomerID*Int
                  deriving (Show)

data BookReview = BookReview BookInfo CustomerID String
                  deriving (Show)
Quand, avec ghci, j'essaye d'exécuter cette ligne :
Code :
BookReview (Book 0 "Title" []) 14 "Hello"
Eh bien il me sort un vilain message d'erreur
Code :
1
2
3
4
5
6
7
    No instance for (Num CustomerID)
      arising from the literal `14' at <interactive>:1:31-32
    Possible fix: add an instance declaration for (Num CustomerID)
    In the second argument of `BookReview', namely `14'
    In the expression: BookReview (Book 0 "Title" []) 14 "Hello"
    In the definition of `it':
        it = BookReview (Book 0 "Title" []) 14 "Hello"
Bon, j'ai bien compris le message qu'il veut me faire passer : il ne sait pas convertir un "Num" en "CustomerID". Et gentiment, il me suggère une solution possible : "add an instance declaration for (Num CustomerID)".

Comment faire ce qu'il me propose ?



En passant, il y a un petit exercice que je n'ai pas su résoudre (tiré de http://book.realworldhaskell.org/rea...functions.html ):
Citation:
Écrivez une fonction qui retourne l'avant dernier élément d'une liste.
J'avoue, je sèche

Edit : ah, j'ai trouvé pour cette dernière question :
Code :
1
2
oneButLast (x:_:[]) = x
oneButLast (x:xs) = oneButLast(xs)
Antoine_935 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2010, 16h49   #2
dividee
Membre Expert
 
Homme
Inscription : mars 2007
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 851
Points : 1 182
Points : 1 182
Bonjour Antoine,

Je ne m'y connais pas beaucoup plus que toi en Haskell, mais j'essaie d'apprendre aussi.
J'imagine que CustomerID*Int est une coquille, et qu'il faut lire CustomerID Int.

Il serait possible de faire de CustomerID une instance de la classe Num; les typeclasses sont abordés un peu plus loin dans le livre, au chapitre 6. Mais je ne suis pas sûr que ce soit une bonne idée. Tu devrais pour cela définir comment additionner, multiplier, etc. des CustomerID, ce qui n'a pas beaucoup de sens.

Tu peux te contenter d'écrire:
Code :
BookReview (Book 0 "Title" []) (CustomerID 14) "Hello"
ou bien faire de CustomerID un simple synonyme de Int:
Peut-être un guru du forum aura une réponse plus substantielle, si la mienne te laisse un goût de trop peu.
dividee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2010, 22h57   #3
Antoine_935
Membre Expert
 
Avatar de Antoine_935
 
Antoine d'Otreppe
Développeur web/mobile
Inscription : juillet 2006
Messages : 883
Détails du profil
Informations personnelles :
Nom : Antoine d'Otreppe
Localisation : Belgique

Informations professionnelles :
Activité : Développeur web/mobile

Informations forums :
Inscription : juillet 2006
Messages : 883
Points : 1 038
Points : 1 038
Envoyer un message via MSN à Antoine_935
Salut Dividee

Merci pour ces réponses : c'est exactement ce qu'il me fallait
Encore un peu de patience et j'arriverai au chapitre 6... j'ai hâte
Antoine_935 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h08.


 
 
 
 
Partenaires

Hébergement Web