1. const函数
我们看看const函数的声明:
ghci> :t const
const :: a -> b -> a
这个函数实际效果是给定两个参数,它返回第一个参数,也就是返回结果和第二个参数没有一毛钱关系。
我们看看实际运行效果:
ghci> const 1 "nouse"
1
ghci> const 1 undefined
1
这个东西为啥有用,我们说得简单一点:如果你要用到某个函数F,这个函数的原型要求你必须给他提供另外一个函数G作为参数,而F的规约是G的参数必须由F提供,但是G对F提供的参数实在没有兴趣,而处于规约要求,你只能找个折中的方法,即我接受F传递过来的参数,但是我不使用。举例如下:
x >> y = x >>= const y (注意>>=会把左边的Monad转换为一个正常值后传到给右边的函数,即 (>>=) :: Monad m => m a -> (a -> m b) -> m b)
实际它和下面是同样的效果,但是看上去更加简洁
x>>y = x>>= \_-> y
2. id
ghci> :t id
id :: a -> a
id把它的参数原样返回。这有啥用? 同样的道理,有些函数调用的格式上要求你提供一个函数,它在给你传递一个值让你处理,而你实际上不想做任何处理(只想原样进来,原样出去)