2017-09-03 9 views
1

Je ne suis pas sûr de ce qu'il faut inclure dans ce message, car je ne comprends vraiment pas le message d'erreur, donc je viens d'inclure l'erreur, le fichier Model.hs et les modèles . J'utilise le site d'échafaudage Yesod pour MySQL. Le système d'exploitation que j'utilise est Ubuntu. Si vous avez besoin de voir l'un des autres codes, par exemple définitions de données, puis demandez simplement.Aucune erreur d'instance avec Yesod, persistant et MySQL

Message d'erreur:

[ 6 of 20] Compiling Model   (src/Model.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/Model.o) 

/home/james/ConVoke/convoke-website/src/Model.hs:24:7: error: 
    • No instance for (persistent-2.7.0:Database.Persist.Sql.Class.PersistFieldSql 
         Language) 
     arising from a use of ‘persistent-2.7.0:Database.Persist.Sql.Class.sqlType’ 
    • In the fourth argument of ‘FieldDef’, namely 
     ‘persistent-2.7.0:Database.Persist.Sql.Class.sqlType 
      (Data.Proxy.Proxy :: Data.Proxy.Proxy Language)’ 
     In the expression: 
     FieldDef 
      (HaskellName (packPTH "language")) 
      (DBName (packPTH "language")) 
      (FTTypeCon Nothing (packPTH "Language")) 
      (persistent-2.7.0:Database.Persist.Sql.Class.sqlType 
      (Data.Proxy.Proxy :: Data.Proxy.Proxy Language)) 
      [] 
      True 
      NoReference 
     In the ‘entityFields’ field of a record 

-- While building package website-0.0.0 using: 
     /home/james/.stack/setup-exe-cache/x86_64-linux/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.24.2.0 build lib:website --ghc-options " -ddump-hi -ddump-to-file" 

Model.hs:

{-# LANGUAGE EmptyDataDecls    #-} 
{-# LANGUAGE FlexibleInstances   #-} 
{-# LANGUAGE GADTs      #-} 
{-# LANGUAGE GeneralizedNewtypeDeriving #-} 
{-# LANGUAGE MultiParamTypeClasses  #-} 
{-# LANGUAGE NoImplicitPrelude   #-} 
{-# LANGUAGE OverloadedStrings   #-} 
{-# LANGUAGE TemplateHaskell   #-} 
{-# LANGUAGE TypeFamilies    #-} 
module Model where 

import ClassyPrelude.Yesod 
import Database.Persist.Quasi 

import Import.Game 
import Import.Language 
import Import.Profile 

-- You can define all of your database entities in the entities file. 
-- You can find more information on persistent and how to declare entities 
-- at: 
-- http://www.yesodweb.com/book/persistent/ 
share [mkPersist sqlSettings, mkMigrate "migrateAll"] 
    $(persistFileWith lowerCaseSettings "config/models") 

modèles:

Player 
    name Text 
    username Text 
    dob Day 
    language Language 
    tournaments [TournamentResult] 
    deriving (Show) 

PlatformAccount 
    player PlayerId 
    platform Platform 
    account Text 
    deriving (Show) 

SocialAccount 
    player PlayerId 
    site SocialSite 
    account Text 
    deriving (Show) 

PastTeam 
    player PlayerId 
    team TeamId 
    yearJoined Int 
    yearLeft Int 
    deriving (Show) 

TournamentResult 
    player PlayerId 
    team TeamId 
    name Text 
    placing Text 
    year Int 
    deriving (Show) 

Roster 
    name Text 
    game Game 
    team TeamId 
    players [PlayerId] 
    creationDay Day 
    deriving (Show) 

PlayerRole 
    roster RosterId 
    player PlayerId 
    role Role 
    deriving (Show) 

CompetitiveGame 
    game Game 
    platform Platform 
    role Role 
    availability Availability 
    playingSince Int 
    deriving (Show) 

Team 
    name Text 
    creationDay Day 
    deriving (Show) 

Merci à l'avance :)

EDIT: Comme l'a demandé la langue. hs fichier définissant le La Type de données nguage:

module Import.Language where 

allLanguages :: [Language] 
allLanguages = [Afrikanns ..] 

data Language = Afrikanns | 
       Albanian | 
       Arabic | 
       Armenian | 
       Basque | 
       Bengali | 
       Bulgarian | 
       Catalan | 
       Cambodian | 
       Chinese_Mandarin | 
       Croation | 
       Czech | 
       Danish | 
       Dutch | 
       English | 
       Estonian | 
       Fiji | 
       Finnish | 
       French | 
       Georgian | 
       German | 
       Greek | 
       Gujarati | 
       Hebrew | 
       Hindi | 
       Hungarian | 
       Icelandic | 
       Indonesian | 
       Irish | 
       Italian | 
       Japanese | 
       Javanese | 
       Korean | 
       Latin | 
       Latvian | 
       Lithuanian | 
       Macedonian | 
       Malay | 
       Malayalam | 
       Maltese | 
       Maori | 
       Marathi | 
       Mongolian | 
       Nepali | 
       Norwegian | 
       Persian | 
       Polish | 
       Portuguese | 
       Punjabi | 
       Quechua | 
       Romanian | 
       Russian | 
       Samoan | 
       Serbian | 
       Slovak | 
       Slovenian | 
       Spanish | 
       Swahili | 
       Swedish | 
       Tamil | 
       Tatar | 
       Telugu | 
       Thai | 
       Tibetan | 
       Tonga | 
       Turkish | 
       Ukranian | 
       Urdu | 
       Uzbek | 
       Vietnamese | 
       Welsh | 
       Xhosa 
       deriving (Enum, Show, Eq) 
+1

Où et comment le type 'Language' est-il défini? – Sibi

+0

@Sibi Language est un type de données défini par moi-même dans Language.hs pour représenter les différentes langues qu'un utilisateur peut sélectionner dans son profil. Il est importé dans Model.hs en tant que Import.Language. En fait, je n'avais pas pensé à la connexion entre Language dans l'erreur et mon type de données, je pensais juste que cela faisait partie du paquet. Je suppose que je devrais donner à mes types de données moins de noms génériques afin qu'ils se distinguent un peu plus XD –

Répondre

2

L'erreur indique qu'elle n'est pas capable de trouver l'instance persistante liée au type de somme. Vous devez faire deux choses pour le réparer:

=> Assurez-vous de dériver Show et Read instances pour votre type de somme. Exemple:

data Language = JS | Haskell deriving (Eq, Show, Read, Ord) 

=> déduis les instances connexes persistants pour l'aide haskell modèle:

derivePersistField "Language" 

Vous devez faire cela pour tous vos types de somme que vous utilisez pour votre modèle.