我正在尝试通过将多个持久实体按其外键字段进行分组来构建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)被抽象化。我想(只是一个疯狂的初学者猜测)我可以通过将
fromPersistValue
和read
编写到Int64中来自己为PersonId实现Hashable,为此已经有一个Hashable实现,但是我想可能会有一个不太复杂的方法来实现这一点。有什么建议么?
最佳答案
一定是HashMap
吗? Data.Map
只需要Ord
。 Hashable
类有点狡猾,无论如何都可以使用修复程序。
除非您知道自己在做什么,并且不了解Hashable
的哈希行为中的缺陷,否则切勿使用HashMap
会做的Data.Map
。
这具有避免不必要的孤立实例的副作用。 (比起Hashable,Ord要多得多)