2
我遇到小麻煩把這項do
語句塊:脫糖「做」
ex10 :: [Int]
ex10 = do
num <- [1..20]
guard (even num)
guard (num `mod` 3 == 0)
return num
變成某種monad
語法如下:
ex10' :: [Int]
ex10' = [1..20] >>= (guard . even) >>= (guard . (==0) . (mod 3)) >>= \r -> return r
這不工作,我我不太清楚爲什麼。我想我可能誤解了guard
但我不確定以什麼方式。
你錯過了'num'結合。您需要在第一個「>> =」處命名,以便在隨後的條件中重用它。 –
另請注意,對於沒有<<-'的行,使用'>>'而不是'>> ='。 –
你寫的代碼是'do {num < - [1..20]; x < - guard(偶數); r < - guard(x \'mod \'3 == 0);返回r}'。 –