首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Opaleye中的新类型键引用为可空?

如何将Opaleye中的新类型键引用为可空?
EN

Stack Overflow用户
提问于 2016-08-05 16:00:37
回答 2查看 189关注 0票数 1

我对我所有的桌子都使用新类型的键

代码语言:javascript
复制
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')

我现在想要一个可空的引用,在另一个表中使用这样的键,但我正在挣扎。如何将密钥引用为可空?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)读取。

也许这张小桌子能让通信变得更清晰:

代码语言:javascript
复制
Opaleye side                  | Haskell side
----------------------------- | -------------
Column PGInt8                 | Int64
Column (Nullable PGInt)       | Maybe Int64
Key' (Column (Nullable PGInt) | Key' (Maybe Int64) 

一般而言:

代码语言:javascript
复制
Opaleye side                    | Haskell side
------------------------------- | -------------
Column o                        | h
Column (Nullable o)             | Maybe h
MyNewype' (Column (Nullable o)) | MyNewType' (Maybe h)
票数 0
EN

Stack Overflow用户

发布于 2016-08-09 14:27:06

Opaleye有一个Nullable PGInt8Maybe 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38793460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档