那些看似没用的东西

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把它的参数原样返回。这有啥用? 同样的道理,有些函数调用的格式上要求你提供一个函数,它在给你传递一个值让你处理,而你实际上不想做任何处理(只想原样进来,原样出去)

你可能感兴趣的:(那些看似没用的东西)