2013-06-11 1 views
4

Yesod 책 (10 장)에서 Persistent 예제를 실행하려고합니다. 나는 .hs 파일에 초기 예제를 입력하고, 카발 파일을 만들고, 컴파일을 시도했다. 컴파일러는 "persist"를 찾을 수 없다고 불평합니다. 나는 함수가 새로운 패키지 (내가 포함하지 않은)로 옮겼거나 더 이상 사용되지 않는다고 추측하지만, 어떤 키워드와 hoogle이이 문제에 관해 밝혀지지 않았는지 모르겠습니다. 어떤 도움이라도 대단히 감사 할 것입니다. 아마 나는이 책이 바탕으로 한 Yesod의 버전으로 되돌아 가야한다. 어떤 yesod-platform을 설치해야합니까? 내 chapter10.cabal 파일 여기Yesod book의 첫 번째 영구 예제가 컴파일되지 않습니다. persist를 찾을 수 없습니다.

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 

: 여기

-- 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 

답변

4

some older documentation에 따르면 persist은 더 이상 사용되지 않습니다. 버전 1.2.0에서 제거 된 것 같습니다.

persist :: QuasiQuoter

는 사용되지 않는 : 대신 persistUpperCase을 사용하십시오.

+0

아 ... 이전 문서를 확인한 적이 없었습니다. 방금 1.2.0.0과 1.2.0.1을 보았습니다. 나를 생각해 줘서 고마워! – tim93422