发布于 2011-09-13 21:20:46
当您不需要高阶函数的所有灵活性时,它对于传递到高阶函数非常有用。例如,一元序列运算符>>
可以根据一元绑定运算符定义为
x >> y = x >>= const y
它比使用lambda更简洁
x >> y = x >>= \_ -> y
你甚至可以不用指针就可以使用它
(>>) = (. const) . (>>=)
尽管在这种情况下我并不特别推荐这样做。
发布于 2011-09-14 16:30:21
Data.Functor.(<$)
是使用const
的一个简单示例。有了这个函数,你可以说:我这里有一个函数器,里面有一些无聊的东西,但我想要在它里面有另一个有趣的东西,而不改变函数器的形状。例如。
import Data.Functor
42 <$ Just "boring"
--> Just 42
42 <$ Nothing
--> Nothing
"cool" <$ ["nonsense","stupid","uninteresting"]
--> ["cool","cool","cool"]
它的定义是:
(<$) :: a -> f b -> f a
(<$) = fmap . const
或者写成不是毫无意义的:
cool <$ uncool = fmap (const cool) uncool
您可以看到这里如何使用const
来“忘记”输入。
发布于 2011-09-14 17:25:13
另一个用途是实现具有不应计算的伪参数的类成员函数(用于解析不明确的类型)。示例可能是Data.bits格式的:
instance Bits Int where
isSigned = const True
bitSize = const wordSize
...
通过使用const,我们显式地表示我们正在定义常量值。
就我个人而言,我不喜欢使用伪参数,但如果在类中使用它们,那么这是编写实例的一种相当好的方式。
https://stackoverflow.com/questions/7402528
复制相似问题