2017-02-23 37 views
0

我在使用的Haxl庫中遇到過使用:>>=的問題。我不確定這與>>=運營商有什麼不同?數據類型中的單調操作?

例如:

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) 
+0

@ jd823592 Haxl庫在問題 – Shersh

+0

已經提到的摺疊Cont和它的符號結構成實際值對不起,我是一個白癡,我誤解了 – jakubdaniel

回答

1

它只是在操作的形式類型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其通過解釋:>>=:<*>,並:<$>與相關聯的>>=應用程序(或>=>)等

+0

謝謝,我習慣於在類中定義運算符,而不是類型構造函數。 :-) –

+0

當然,我也覺得它太困惑了:),但是一旦你熟悉了這種使用操作符的方式,你可能會發現它在某些場合很有用。 – jakubdaniel