2015-04-17 31 views
0

我已經採取了http://www.yesodweb.com/book/persistent(概要部分)的代碼的一部分,並試圖將它加載到ghci(v7.6.3,運行在Ubuntu 14.04)。Haskell解析錯誤,當使用DataBase.Persist(可能與使用準引號相關)

import   Database.Persist 
import   Database.Persist.Sqlite 
import   Database.Persist.TH 

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

當加載到ghci中,我得到了以下錯誤:

Prelude> :load "/home/gautham/tmp/Test.hs" 
[1 of 1] Compiling Main    (/home/gautham/tmp/Test.hs, interpreted) 

/home/gautham/tmp/Test.hs:7:1: 
    parse error (possibly incorrect indentation or mismatched brackets) 
Failed, modules loaded: none. 
Prelude> 

這也是以 '人' 就行了。任何想法可能會造成這種情況?我在網上看過幾個例子,並嘗試過幾種縮進的變體,但還沒有能夠得到這個編譯。我認爲這與錯誤地使用準引號有關,但我不確定是什麼?

乾杯 Gautham

回答

2

您在使用本教程建議,以及語言的編譯指示?換句話說,沒有你的源代碼文件

{-# LANGUAGE EmptyDataDecls    #-} 
{-# LANGUAGE FlexibleContexts   #-} 
{-# LANGUAGE GADTs      #-} 
{-# LANGUAGE GeneralizedNewtypeDeriving #-} 
{-# LANGUAGE MultiParamTypeClasses  #-} 
{-# LANGUAGE OverloadedStrings   #-} 
{-# LANGUAGE QuasiQuotes    #-} 
{-# LANGUAGE TemplateHaskell   #-} 
{-# LANGUAGE TypeFamilies    #-} 

所有這些可能並不需要開始,但你可以找出哪些是通過一次去除一個不必要的,直到你有一個最小集仍然編譯。

+0

謝謝!我看過沒有這些編譯指示的其他代碼示例,並認爲它們只是註釋。它還沒有編譯,但它從解析錯誤中向前移動。我會試着選擇性地啓用這些,一旦我編譯它。 –

+0

@ GauthamGanapathy它們使用與註釋相同的格式,但它們的確是特殊的指令,告訴GHC啓用相應的擴展。您不需要在源文件中包含它們,但是必須通過命令行標誌告訴GHC使用哪些擴展。 – kqr

+1

只是想注意'' - { - #LANGUAGE QuasiQuotes# - }'是我所缺少的。 – sbditto85

2

您需要啓用了很多語言擴展:

{-# LANGUAGE GADTs      #-} 
{-# LANGUAGE GeneralizedNewtypeDeriving #-} 
{-# LANGUAGE MultiParamTypeClasses  #-} 
{-# LANGUAGE QuasiQuotes    #-} 
{-# LANGUAGE TemplateHaskell   #-} 
{-# LANGUAGE TypeFamilies    #-} 

此外,[persistLowerCase| ... |]必須要麼在同一行開始爲share或有點縮進,因爲它是share第二個參數。所以,你可能會得到:

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

謝謝!我會試試這些編譯指示。我確實嘗試了對[persistLowerCase | ... |]部分的縮進,但當時它並不起作用,可能來自缺失的雜注。 –