2015-03-18 44 views
0

我已經創建了一個數據庫,我希望有一個類型爲[(String,[String])]的字段。Haskell:在Persist.Sql中使用元組 - 數據庫作爲PersistSqlField

share [mkPersist sqlSettings, mkMigrate "migrateAll"][persistLowerCase| 
    ConfigDB 
     numberOfParticipants Int 
     groupId    Int 
     memberList   [(String,[String])] 
     deriving Show 
    |] 

不過,我得到的錯誤消息:試圖運行時

異常編譯時代碼:無效字段類型> 「[(字符串,[字符串])]」 PSFail PSFail「PSFail \\「(\\」\\「,\\」\\「,Nothing)\」

錯誤似乎來自於使用元組,因爲[String]工作得很好,但如果我寫字符串,字符串)編譯器告訴我:

「不在範圍:類型構造或類字符串, 也許你意字符串(從前奏導入)」

在Database.Persist.Sql我找到 (PersistFieldSql一個,PersistFieldSql B)=> PersistFieldSql (a,b)是一個實例,所以它應該工作。

此外,導入Data.Tuple沒有幫助。 我已經導入了Database.Persist.Sqlite,當然。

由於提前,

索菲亞

回答

1

這是棘手的(有時是不可能的)嵌入持久定義語法裏面複雜的類型。我的建議是在你的Haskell代碼定義一個類型同義詞,例如:

type MemberList = [(String, [String])] 

,然後使用該類型的定義裏面。

+0

謝謝。我仍然困惑,因爲我信任PersistentFieldSql實例的歸納定義來解決這個問題,我想我只需要添加正確的導入。 – 2015-03-19 09:48:28