gpt4 book ai didi

haskell - Yesod 书中的第一个持久性示例无法编译 - 找不到持久性

转载 作者:行者123 更新时间:2023-12-03 07:10:39 25 4
gpt4 key购买 nike

我正在尝试运行 Yesod 书中的持久性示例(第 10 章)。我在 .hs 文件中输入了初始示例,创建了 cabal 文件,并尝试编译。编译器提示它找不到“persist”。我假设这个函数 persist 已经转移到一个新的包(我没有包含它)或者已经被弃用,但我不知道是哪个,并且 hoogle 没有对这个问题给出任何说明。任何帮助将非常感激。也许我应该回到这本书所基于的 Yesod 版本。我应该为此安装哪个 yesod 平台?谢谢,蒂姆

这是错误消息:

perry$ cabal install
Resolving dependencies...
Configuring chapter10-0.1.0.0...
Building chapter10-0.1.0.0...
Preprocessing executable 'chapter10' for chapter10-0.1.0.0...
[1 of 1] Compiling Main ( ex1.hs, dist/build/chapter10/chapter10-tmp/Main.o )

ex1.hs:8:55: Not in scope: `persist'
cabal: Error: some packages failed to install:
chapter10-0.1.0.0 failed during the building phase. The exception was:
ExitFailure 1

这是我的 Chapter10.cabal 文件:

-- Initial chapter10.cabal generated by cabal init.  For further 
-- documentation, see http://haskell.org/cabal/users-guide/
name: chapter10
version: 0.1.0.0
license-file: LICENSE
cabal-version: >=1.8
build-type: Simple

executable chapter10
main-is: ex1.hs
-- other-modules:
build-depends: base ==4.5.*
, yesod-platform
, yesod
, persistent-sqlite
, transformers
, persistent-template
, persistent

这是我的 ex1.hs 文件:

{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings #-}
{-# LANGUAGE GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.Sqlite
import Database.Persist.TH
import Control.Monad.IO.Class (liftIO)

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
Person
name String
age Int Maybe
deriving Show
BlogPost
title String
authorId PersonId
deriving Show
|]

main :: IO ()
main = withSqliteConn ":memory:" $ runSqlConn $ do
runMigration migrateAll

johnId <- insert $ Person "John Doe" $ Just 35
janeId <- insert $ Person "Jane Doe" Nothing

insert $ BlogPost "My fr1st p0st" johnId
insert $ BlogPost "One more for good measure" johnId

oneJohnPost <- selectList [BlogPostAuthorId ==. johnId] [LimitTo 1]
liftIO $ print (oneJohnPost :: [Entity BlogPost])

john <- get johnId
liftIO $ print (john :: Maybe Person)

delete janeId
deleteWhere [BlogPostAuthorId ==. johnId]

以下是我的 yesod 和持久包的版本:

perry$ ghc-pkg list| grep -i -e yesod -e persist
persistent-1.2.0.1
persistent-sqlite-1.2.0
persistent-template-1.2.0.1
yesod-1.2.1
yesod-auth-1.2.0.1
yesod-core-1.2.2
yesod-form-1.3.0
yesod-persistent-1.2.1
yesod-platform-1.2.1
yesod-routes-1.2.0.1
yesod-static-1.2.0
yesod-test-1.2.0

最佳答案

根据some older documentation , persist 已被弃用。它似乎已在 1.2.0 版本中删除。

persist :: QuasiQuoter

Deprecated: Please use persistUpperCase instead.

关于haskell - Yesod 书中的第一个持久性示例无法编译 - 找不到持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com