Jam*_*ton 4 mysql haskell persistent yesod
我不确定在这篇文章中要包含什么内容,因为我真的不理解错误消息,所以我只包含了错误、Model.hs 文件和模型。我正在使用 MySQL 的 Yesod 脚手架网站。我使用的操作系统是 Ubuntu。如果您需要查看任何其他代码(例如数据定义),请询问。
\n\n错误信息:
\n\n[ 6 of 20] Compiling Model ( src/Model.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/Model.o )\n\n/home/james/ConVoke/convoke-website/src/Model.hs:24:7: error:\n \xe2\x80\xa2 No instance for (persistent-2.7.0:Database.Persist.Sql.Class.PersistFieldSql\n Language)\n arising from a use of \xe2\x80\x98persistent-2.7.0:Database.Persist.Sql.Class.sqlType\xe2\x80\x99\n \xe2\x80\xa2 In the fourth argument of \xe2\x80\x98FieldDef\xe2\x80\x99, namely\n \xe2\x80\x98persistent-2.7.0:Database.Persist.Sql.Class.sqlType\n (Data.Proxy.Proxy :: Data.Proxy.Proxy Language)\xe2\x80\x99\n In the expression:\n FieldDef\n (HaskellName (packPTH "language"))\n (DBName (packPTH "language"))\n (FTTypeCon Nothing (packPTH "Language"))\n (persistent-2.7.0:Database.Persist.Sql.Class.sqlType\n (Data.Proxy.Proxy :: Data.Proxy.Proxy Language))\n []\n True\n NoReference\n In the \xe2\x80\x98entityFields\xe2\x80\x99 field of a record\n\n-- While building package website-0.0.0 using:\n /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"\nRun Code Online (Sandbox Code Playgroud)\n\n型号.hs:
\n\n{-# LANGUAGE EmptyDataDecls #-}\n{-# LANGUAGE FlexibleInstances #-}\n{-# LANGUAGE GADTs #-}\n{-# LANGUAGE GeneralizedNewtypeDeriving #-}\n{-# LANGUAGE MultiParamTypeClasses #-}\n{-# LANGUAGE NoImplicitPrelude #-}\n{-# LANGUAGE OverloadedStrings #-}\n{-# LANGUAGE TemplateHaskell #-}\n{-# LANGUAGE TypeFamilies #-}\nmodule Model where\n\nimport ClassyPrelude.Yesod\nimport Database.Persist.Quasi\n\nimport Import.Game\nimport Import.Language\nimport Import.Profile\n\n-- You can define all of your database entities in the entities file.\n-- You can find more information on persistent and how to declare entities\n-- at:\n-- http://www.yesodweb.com/book/persistent/\nshare [mkPersist sqlSettings, mkMigrate "migrateAll"]\n $(persistFileWith lowerCaseSettings "config/models")\nRun Code Online (Sandbox Code Playgroud)\n\n楷模:
\n\nPlayer\n name Text\n username Text\n dob Day\n language Language\n tournaments [TournamentResult]\n deriving (Show)\n\n PlatformAccount\n player PlayerId\n platform Platform\n account Text\n deriving (Show)\n\n SocialAccount\n player PlayerId\n site SocialSite\n account Text\n deriving (Show)\n\n PastTeam\n player PlayerId\n team TeamId\n yearJoined Int\n yearLeft Int\n deriving (Show)\n\n TournamentResult\n player PlayerId\n team TeamId\n name Text\n placing Text\n year Int\n deriving (Show)\n\n Roster\n name Text\n game Game\n team TeamId\n players [PlayerId]\n creationDay Day\n deriving (Show)\n\n PlayerRole\n roster RosterId\n player PlayerId\n role Role\n deriving (Show)\n\n CompetitiveGame\n game Game\n platform Platform\n role Role\n availability Availability\n playingSince Int\n deriving (Show)\n\n Team\n name Text\n creationDay Day\n deriving (Show)\nRun Code Online (Sandbox Code Playgroud)\n\n提前致谢 :)
\n\n编辑:根据要求,定义语言数据类型的 Language.hs 文件:
\n\nmodule Import.Language where\n\nallLanguages :: [Language]\nallLanguages = [Afrikanns ..]\n\ndata Language = Afrikanns |\n Albanian |\n Arabic |\n Armenian |\n Basque |\n Bengali |\n Bulgarian |\n Catalan |\n Cambodian |\n Chinese_Mandarin |\n Croation |\n Czech |\n Danish |\n Dutch |\n English |\n Estonian |\n Fiji |\n Finnish |\n French |\n Georgian |\n German |\n Greek |\n Gujarati |\n Hebrew |\n Hindi |\n Hungarian |\n Icelandic |\n Indonesian |\n Irish |\n Italian |\n Japanese |\n Javanese |\n Korean |\n Latin |\n Latvian |\n Lithuanian |\n Macedonian |\n Malay |\n Malayalam |\n Maltese |\n Maori |\n Marathi |\n Mongolian |\n Nepali |\n Norwegian |\n Persian |\n Polish |\n Portuguese |\n Punjabi |\n Quechua |\n Romanian |\n Russian |\n Samoan |\n Serbian |\n Slovak |\n Slovenian |\n Spanish |\n Swahili |\n Swedish |\n Tamil |\n Tatar |\n Telugu |\n Thai |\n Tibetan |\n Tonga |\n Turkish |\n Ukranian |\n Urdu |\n Uzbek |\n Vietnamese |\n Welsh |\n Xhosa\n deriving (Enum, Show, Eq)\nRun Code Online (Sandbox Code Playgroud)\n
该错误表明它无法找到与类型相关的持久实例。您必须做两件事来修复它:
=> 确保为您的总和类型派生Show并Read实例。例子:
data Language = JS | Haskell deriving (Eq, Show, Read, Ord)
Run Code Online (Sandbox Code Playgroud)
=> 使用模板 haskell 派生其持久相关实例:
derivePersistField "Language"
Run Code Online (Sandbox Code Playgroud)
您必须对用于模型的所有总和类型执行此操作。