1. 程式人生 > >Haskell 學習筆記-18:sequence、mapM、forever 的實現

Haskell 學習筆記-18:sequence、mapM、forever 的實現

編寫函式,很容易混淆返回型別。如果函式有副作用,必須用 return 返回型別。從有副作用的函式”取值“,必須用 <- 。另外 return 後面如果有複雜表示式,還是用括號擴起來吧,因為 return 和後面符號結合的優先順序很高,不小心就出現符號結合順序的錯誤。

sequence' [] = return []
sequence' (x:xs) = do 
    a <- x
    b <- sequence' xs
    return (a : b)

mapM' :: (a -> (IO ())) -> [a] -> (IO ())
mapM' x [] = return ()
mapM'
x (y:ys) = do x y mapM' x ys return () forever' x = do x forever' x

親自編寫這些庫函式有兩個好處,一是對這些函式的作用理解更深,其次,對於理解 Haskell 語法、語義非常有幫助。