【问题标题】:Haskell : Using Tuple in a Persist.Sql - Database as PersistSqlFieldHaskell:在 Persist.Sql 中使用元组 - 数据库作为 PersistSqlField
【发布时间】:2015-03-18 21:59:53
【问题描述】:

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

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

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

尝试运行编译时代码时出现异常:无效字段类型 >"[(String,[String])]" PSFail PSFail "PSFail \"(\\"\\",\\"\\",Nothing )\"

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

"不在范围内:类型构造函数或类String, 也许你的意思是字符串(从 Prelude 导入)”

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

此外,导入 Data.Tuple 也无济于事。 当然,我已经导入了 Database.Persist.Sqlite。

提前致谢,

索菲亚

【问题讨论】:

    标签: sql database haskell tuples persist


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我仍然感到困惑,因为我相信 PersistentFieldSql 实例的归纳定义来解决这个问题,我认为我只需要添加正确的导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2017-10-28
    相关资源
    最近更新 更多