Как ссылаться на новый ключ в Opaleye как на nullable?
Я использую новые ключи для всех моих таблиц
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')
Теперь я хочу получить ссылку на такой ключ в другой таблице, но я изо всех сил. Как я могу ссылаться на ключ как обнуляемый?
2 ответа
Чтобы объединить мои комментарии с ответом @ForestPhoenix:
Opaleye позволяет конвертировать 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)
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)