版权声明:本文为博主原创文章,未经博主允许不得转载。 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 语法、语义非常有帮助。