首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据类型中的一元操作?

数据类型中的一元操作?
EN

Stack Overflow用户
提问于 2017-02-23 09:40:27
回答 1查看 52关注 0票数 0

我在我正在使用的:>>=库中遇到了使用哈塞尔的情况。我不知道这和>>=操作符有什么不同?

例如:

代码语言:javascript
复制
data MyType a = MyType a :>>= (a -> Int)

这个操作在MyType中到底是做什么的?

这是它在Haxl中使用的上下文:

代码语言:javascript
复制
newtype GenHaxl u a = GenHaxl { unHaxl :: Env u -> IORef (RequestStore u) -> IO (Result u a) } --|| u is the env, a is the result

data Result u a
  = Done a
    | Throw SomeException
    | Blocked (Cont u a)

data Cont u a
  = Cont (GenHaxl u a)
    | forall b. Cont u b :>>= (b -> GenHaxl u a)
    | forall b. (Cont u (b -> a)) :<*> (Cont u b)
    | forall b. (b -> a) :<$> (Cont u b)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 09:59:59

它只是一个操作符形式的Cont u a类型的构造函数。它是在问题中包含的代码中定义的。

代码语言:javascript
复制
Cont u a

都是

代码语言:javascript
复制
Cont (GenHaxl u a)

代码语言:javascript
复制
forall b. (:>>=) (Cont u b) (b -> GenHaxl u a)

代码语言:javascript
复制
forall b. (:<*>) (Cont u (b -> a)) (Cont u b)

代码语言:javascript
复制
forall b. (:<$>) (b -> a) (Cont u b)

最后三种情况是递归的,正如他们提到的Cont u ...。在代码中还有toHaxl,它将Cont及其符号结构折叠为实际值,通过应用关联的>>= (或>=>)等来解释:>>=:<*>:<$>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42411940

复制
相关文章

相似问题

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