2017-09-03 4 views
1

Ich bin nicht sicher, was in diesem Beitrag nicht enthalten, weil ich die Fehlermeldung nicht wirklich verstehen, so dass ich den Fehler nur habe enthalten, die Model.hs Datei und die Modelle . Ich benutze die Yesod-Scaffolding-Site für MySQL. Das Betriebssystem, das ich benutze, ist Ubuntu. Wenn Sie irgendeinen anderen Code sehen müssen, z.B. Datendefinitionen dann einfach fragen.Keine Instanz Fehler mit Jessod, persistent und MySQL

Fehlermeldung:

[ 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") 

Modelle:

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) 

Vielen Dank im Voraus :)

EDIT: Wie die gewünschte Sprache. hs-Datei, die La definiert Nguage-Datentyp:

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

Wo und wie ist der Typ 'Sprache' definiert? – Sibi

+0

@Sibi Language ist ein Datentyp, den ich selbst in Language.hs definiert habe, um die verschiedenen Sprachen darzustellen, die ein Benutzer in seinem Profil auswählen kann. Es wird in Model.hs als Import.Language importiert. Ich hatte eigentlich nicht über die Verbindung zwischen Sprache in dem Fehler und meinem Datentyp gedacht, ich hatte nur gedacht, dass es Teil des Pakets war. Ich denke, ich sollte meinen Datentypen weniger generische Namen geben, damit sie etwas mehr XD hervortreten –

Antwort

2

Der Fehler zeigt, dass es die summentypbezogene persistente Instanz nicht finden kann. Sie müssen zwei Dinge tun, um es zu beheben:

=> Achten Sie darauf, Show und Read Instanzen für Ihre Summe Typ abzuleiten. Beispiel:

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

=> Man leitet die persistenten verwandten Instanzen für das Template Haskell mit:

derivePersistField "Language" 

Sie haben, dies zu tun für alle Summe Typen, die Sie für Ihr Modell verwenden.

Verwandte Themen