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])]
然后在定义中使用该类型。
我创建了一个数据库,我希望在其中有一个类型为 [(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])]
然后在定义中使用该类型。