Haskell 学习笔记-18:sequence、mapM、forever 的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quicmous/article/details/80873746

编写函数,很容易混淆返回类型。如果函数有副作用,必须用 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 语法、语义非常有帮助。

猜你喜欢

转载自blog.csdn.net/quicmous/article/details/80873746