YesSOD、Persistent和MySQL没有实例错误

YesSOD、Persistent和MySQL没有实例错误,mysql,haskell,yesod,persistent,Mysql,Haskell,Yesod,Persistent,我不确定这篇文章应该包含什么,因为我真的不理解错误信息,所以我只包含了错误、Model.hs文件和模型。我正在使用MySQL的Yesod脚手架站点。我使用的操作系统是Ubuntu。如果您需要查看任何其他代码,例如数据定义,请询问 错误消息: [ 6 of 20] Compiling Model ( src/Model.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/Model.o ) /home/james/C

我不确定这篇文章应该包含什么,因为我真的不理解错误信息,所以我只包含了错误、Model.hs文件和模型。我正在使用MySQL的Yesod脚手架站点。我使用的操作系统是Ubuntu。如果您需要查看任何其他代码,例如数据定义,请询问

错误消息:

[ 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"
型号1.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)
提前感谢:)

编辑:根据请求,编辑定义语言数据类型的Language.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)

错误表明它无法找到与sum类型相关的持久实例。您必须做两件事来修复它:

=>确保为求和类型派生
Show
Read
实例。例如:

data Language = JS | Haskell deriving (Eq, Show, Read, Ord)
=>使用模板haskell为其派生持久相关实例:

derivePersistField "Language"

您必须对模型中使用的所有求和类型执行此操作。

类型
语言
在何处以及如何定义?@Sibi Language是我在Language.hs中定义的数据类型,表示用户可以在其配置文件中选择的各种语言。它将作为Import.Language导入Model.hs。实际上,我没有考虑错误中的语言和我的数据类型之间的联系,我只是认为它是包的一部分。我想我应该给我的数据类型提供更少的通用名称,这样它们会更突出一些XD
derivePersistField“Language”
应该添加到
Language.hs
文件中。