2017-09-03 24 views
1

이 오류 메시지를 이해하지 못하기 때문에이 게시물에 무엇을 포함해야할지 모르겠다. 오류, Model.hs 파일 및 모델을 포함 시켰습니다. . 나는 MySQL을 위해 Yesod 스캐 폴딩 사이트를 사용하고 있습니다. 제가 사용하고있는 운영체제는 우분투입니다. 예를 들어 다른 코드를 볼 필요가있는 경우 데이터 정의를 입력하면됩니다.Yesod, Persistent 및 MySQL에 인스턴스 오류가 없음

오류 메시지 :

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

모델 : 사전에

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) 

감사합니다 :)

편집 : 언어를 요청한다. La를 정의하는 hs 파일 데이터 형식 :

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

'언어'유형은 어디에 정의되어 있습니까? – Sibi

+0

@Sibi Language는 Language.hs에서 사용자가 자신의 프로필에서 선택할 수있는 다양한 언어를 나타 내기 위해 자신이 정의한 데이터 형식입니다. Import.Language로 Model.hs로 가져옵니다. 오류의 언어와 데이터 형식 사이의 연결에 대해 실제로 생각하지 못했지만 방금 패키지의 일부라고 생각했습니다. 내 데이터 유형을 덜 일반 이름으로 지정해야 XD가 조금 더 두드러집니다. –

답변

2

오류는 합계 유형과 관련된 지속성 인스턴스를 찾을 수 없음을 보여줍니다. 문제를 해결하려면 다음 두 가지를해야합니다.

=> sum 유형에 대해 ShowRead 인스턴스를 파생해야합니다. 예 :

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

=>는 템플릿 하스켈을 사용하기위한 지속적인 관련 인스턴스를 파생 :

derivePersistField "Language" 

당신은 당신이 당신의 모델을 사용하는 모든 합계 유형에 대해이 작업을 수행 할 수 있습니다.