IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Haskell Discussion :

instance declaration for (Num CustomerID)


Sujet :

Haskell

  1. #1
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    BookReview (Book 0 "Title" []) 14 "Hello"
    Eh bien il me sort un vilain message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ):
    É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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oneButLast (x:_:[]) = x
    oneButLast (x:xs) = oneButLast(xs)

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/05/2015, 18h28
  2. add an instance declaration for (RealFrac Int)
    Par vasilpapa dans le forum Haskell
    Réponses: 5
    Dernier message: 08/03/2015, 00h41
  3. Réponses: 5
    Dernier message: 16/11/2009, 01h54
  4. Declaré en classe de base, instancié en sous classe
    Par jobigoud dans le forum Langage
    Réponses: 3
    Dernier message: 14/11/2005, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo