Haskell : 在 Persist.Sql 中使用元组 - 数据库作为 PersistSqlField

Haskell : Using Tuple in a Persist.Sql - Database as PersistSqlField

我创建了一个数据库,我希望在其中有一个类型为 [(String, [String])] 的字段。

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

但是,我收到一条错误消息:

Exception when trying to run compile-time code: Invalid field type >"[(String,[String])]" PSFail PSFail "PSFail \"(\"\",\"\",Nothing)\"

错误似乎是由使用元组引起的,因为 [String] 工作得很好,但是如果我写 (String, String) 编译器会告诉我:

"Not in scope: type constructor or class String, Perhaps you meant String (imported from Prelude)"

在Database.Persist.Sql我发现 (PersistFieldSql a, PersistFieldSql b) => PersistFieldSql (a, b) 是一个实例,所以它应该可以工作。

此外,导入 Data.Tuple 也没有帮助。 当然,我已经导入了 Database.Persist.Sqlite。

提前致谢,

索菲亚

在持久定义语法中嵌入复杂类型是很棘手的(有时甚至是不可能的)。我的建议是在 Haskell 代码中定义一个类型同义词,例如:

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

然后在定义中使用该类型。