我对我所有的桌子都使用新类型的键
newtype Key' a = Key a deriving (Show, Generic, Functor)
type Key = Key' Int64
type KeyR = Key' (Column PGInt8)
type KeyW = Key' (Maybe (Column PGInt8))
$(makeAdaptorAndInstance "pKey" ''Key')我现在想要一个可空的引用,在另一个表中使用这样的键,但我正在挣扎。如何将密钥引用为可空?
发布于 2016-08-09 18:25:19
将我的评论与@Forest凤的回答结合起来:
操作系统允许您在运行查询时将Column PGInt8转换为Int64。
这意味着它还允许您将Column (Nullable PGInt8)转换为Maybe Int64。
您正在将Column (Nullable PGInt8)包装在Key'新类型中(为了类型安全),这将为您提供Key' (Column (Nullable PGInt8))。这意味着当您运行查询时,需要将其作为Key' (Maybe Int64)读取。
也许这张小桌子能让通信变得更清晰:
Opaleye side | Haskell side
----------------------------- | -------------
Column PGInt8 | Int64
Column (Nullable PGInt) | Maybe Int64
Key' (Column (Nullable PGInt) | Key' (Maybe Int64) 一般而言:
Opaleye side | Haskell side
------------------------------- | -------------
Column o | h
Column (Nullable o) | Maybe h
MyNewype' (Column (Nullable o)) | MyNewType' (Maybe h)发布于 2016-08-09 14:27:06
Opaleye有一个Nullable PGInt8到Maybe Int64的默认实例。
您要做的是将Key' (Column (Nullable PGInt8))转换为Maybe Key = Maybe (Key' Int64)。
要使默认实例正常工作,您需要转换
Key' (Column (Nullable PGInt8)))到Key' (Maybe Int64)Column (Nullable (Key' PGInt8))到Maybe Key = Maybe (Key' Int64)https://stackoverflow.com/questions/38793460
复制相似问题