我正在尝试通过将多个持久实体按其外键字段进行分组来构建Data.HashMap结构。例如。说我有这两个实体(straight out of the Yesod book)

Person
    name String
    age Int Maybe
    deriving Show
BlogPost
    title String
    authorId PersonId
    deriving Show

我想要一个:
HashMap PersonId [BlogPost]

这里的挑战是PersonId不能直接实现Hashable(来自Data.Hashable),此外,它还取决于您所使用的DB(在我的情况下为Postgres)被抽象化。

我想(只是一个疯狂的初学者猜测)我可以通过将fromPersistValueread编写到Int64中来自己为PersonId实现Hashable,为此已经有一个Hashable实现,但是我想可能会有一个不太复杂的方法来实现这一点。

有什么建议么?

最佳答案

一定是HashMap吗? Data.Map只需要OrdHashable类有点狡猾,无论如何都可以使用修复程序。

除非您知道自己在做什么,并且不了解Hashable的哈希行为中的缺陷,否则切勿使用HashMap会做的Data.Map

这具有避免不必要的孤立实例的副作用。 (比起Hashable,Ord要多得多)

10-06 01:39