首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“哈斯克尔序曲”中“const”的意思是什么?

“哈斯克尔序曲”中“const”的意思是什么?
EN

Stack Overflow用户
提问于 2011-09-13 21:17:52
回答 6查看 25.4K关注 0票数 96

翻阅哈斯克尔的前奏曲,I see a function const

代码语言:javascript
复制
const x _ = x

我似乎找不到任何与此函数相关的东西。

这有什么意义呢?有没有人能举个例子说明这个函数可能用在什么地方?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-13 21:20:46

当您不需要高阶函数的所有灵活性时,它对于传递到高阶函数非常有用。例如,一元序列运算符>>可以根据一元绑定运算符定义为

代码语言:javascript
复制
x >> y = x >>= const y

它比使用lambda更简洁

代码语言:javascript
复制
x >> y = x >>= \_ -> y

你甚至可以不用指针就可以使用它

代码语言:javascript
复制
(>>) = (. const) . (>>=)

尽管在这种情况下我并不特别推荐这样做。

票数 87
EN

Stack Overflow用户

发布于 2011-09-14 16:30:21

Data.Functor.(<$)是使用const的一个简单示例。有了这个函数,你可以说:我这里有一个函数器,里面有一些无聊的东西,但我想要在它里面有另一个有趣的东西,而不改变函数器的形状。例如。

代码语言:javascript
复制
import Data.Functor

42 <$ Just "boring"
--> Just 42

42 <$ Nothing
--> Nothing

"cool" <$ ["nonsense","stupid","uninteresting"]
--> ["cool","cool","cool"]

它的定义是:

代码语言:javascript
复制
(<$) :: a -> f b -> f a
(<$) =  fmap . const

或者写成不是毫无意义的:

代码语言:javascript
复制
cool <$ uncool =  fmap (const cool) uncool

您可以看到这里如何使用const来“忘记”输入。

票数 22
EN

Stack Overflow用户

发布于 2011-09-14 17:25:13

另一个用途是实现具有不应计算的伪参数的类成员函数(用于解析不明确的类型)。示例可能是Data.bits格式的:

代码语言:javascript
复制
instance Bits Int where
  isSigned = const True
  bitSize  = const wordSize
  ...

通过使用const,我们显式地表示我们正在定义常量值。

就我个人而言,我不喜欢使用伪参数,但如果在类中使用它们,那么这是编写实例的一种相当好的方式。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7402528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档