我在我正在使用的:>>=库中遇到了使用哈塞尔的情况。我不知道这和>>=操作符有什么不同?
例如:
data MyType a = MyType a :>>= (a -> Int)这个操作在MyType中到底是做什么的?
这是它在Haxl中使用的上下文:
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)发布于 2017-02-23 09:59:59
它只是一个操作符形式的Cont u a类型的构造函数。它是在问题中包含的代码中定义的。
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)最后三种情况是递归的,正如他们提到的Cont u ...。在代码中还有toHaxl,它将Cont及其符号结构折叠为实际值,通过应用关联的>>= (或>=>)等来解释:>>=、:<*>和:<$>。
https://stackoverflow.com/questions/42411940
复制相似问题