- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试使用真实项目来驱动它来学习 Haskell 时,我遇到了以下定义。我不明白每个参数前面的感叹号是什么意思,我的书上好像也没有提到。
data MidiMessage = MidiMessage !Int !MidiMessage
最佳答案
这是一个严格声明。基本上,这意味着在创建数据结构值时必须将其评估为所谓的“弱头部范式”。让我们看一个例子,这样我们就能明白这意味着什么:
data Foo = Foo Int Int !Int !(Maybe Int)
f = Foo (2+2) (3+3) (4+4) (Just (5+5))
上面的函数 f
在求值时将返回一个“thunk”:即执行代码以计算其值。那时,Foo 甚至还不存在,只有代码。
但在某些时候,有人可能会尝试查看它的内部,可能是通过模式匹配:
case f of
Foo 0 _ _ _ -> "first arg is zero"
_ -> "first arge is something else"
这将执行足够的代码来完成它所需要的,仅此而已。因此它将创建一个具有四个参数的 Foo (因为如果它不存在就无法查看它的内部)。首先,因为我们正在测试它,所以我们需要一直评估到 4
,我们意识到它不匹配。
第二个不需要评估,因为我们没有测试它。因此,我们不会将 6
存储在该内存位置,而是存储代码以供以后可能的评估,(3+3)
。只有当有人看到它才会变成 6。
然而,第三个参数前面有一个 !
,因此被严格评估:(4+4)
被执行,并且 8
存储在该内存位置。
第四个参数也是严格求值的。但这就是它变得有点棘手的地方:我们没有全面评估,而只是评估弱的正常头部形态。这意味着我们弄清楚它是 Nothing
还是 Just
something,然后存储它,但我们不再继续。这意味着我们存储的不是 Just 10
,而是实际上 Just (5+5)
,让 thunk 不被评估。知道这一点很重要,尽管我认为它的所有含义都超出了这个问题的范围。
如果启用 BangPatterns
语言扩展,您可以用同样的方式注释函数参数:
f x !y = x*y
f (1+1) (2+2)
将返回 thunk (1+1)*4
。
关于haskell - Haskell 声明中的感叹号是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45103698/
在查看 tslint 规则的源代码时,我发现了以下语句: if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
在查看 tslint 规则的源代码时,我发现了以下语句: if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
我正在处理这个项目,并试图弄清楚前后的感叹号是什么意思。 import ICHING from '!json!constants/iching_deoxy.json'; 最佳答案 这是一个 inlin
我正在输入的内容: INSERT INTO reviews VALUES ('', title='dragon ball z', date='2012-12-01 23:06:03', usernam
在github的jade文档中,谈到了缓冲技术: 为了安全起见,默认情况下会对 = 缓冲的代码进行转义,但是要输出未转义的返回值,您可以使用 !=: p!= aVarContainingMoreHTM
我有两个变量用于包含或排除系统文件(使用最小匹配 glob 语法,其中 ! 代表排除)。 var systemFiles = ['node_modules/**/*', '.git/**/*']; v
我正在尝试切换键“1”和“!”使用 Karabiner,但我无法在任何地方找到感叹号的关键代码。不可能吗? 最佳答案 据我所知,! 没有唯一的键码。相反,它仅在系统接收到 Shift_R + 1 时输
在 Windows 7 上,文件夹搜索框中使用的以下查询无法过滤文件夹中带有“!”的文件。其中感叹号。 filename:! 请问有什么办法可以做这个搜索吗?谢谢。 最佳答案 在您的具体示例中 fil
我有一个带有CENTOS 6.4和WHM 11.38.2。的VPS。我刚刚将WHM更新为最新版本,现在当我转到phpMyAdmin时,在表名旁边和“查询”选项卡中“查询”一词之前,有一个带有白色感叹号
例如: http://localhost/#!/login.html 我不需要“!”。我将如何删除它? eg:http://localhost/#/login.html 这是我的路由器代码: //
https://stackoverflow.com/a/2787560/645703说: ($!) is strict function application. That is, it evalua
我已经看到它现在使用过一两次,其中 ! 标记放在属性名称之前。例如: !overflow: hidden; (还有,see here) 谁能阐明它的目的是什么? 最佳答案 我找不到任何关于它的信息,但
我已经看到它现在使用过一两次,其中 ! 标记放在属性名称之前。例如: !overflow: hidden; (还有,see here) 谁能阐明它的目的是什么? 最佳答案 我找不到任何关于它的信息,但
该程序的目标是获取用户输入并将其转换为 ascii 文本。 代码按其应有的方式工作,但不包含逗号、句点、感叹号或问号。 我尝试将:!、?、' 和逗号作为单独的列表包含在内,并尝试在输入中调用它。但我并
我有州列表,我已经添加了州名搜索过滤器。我有这样的数组: stateList : [{name: 'abc', area:500},{name: '!def', area:500}] 我有 与 ng-
让我们从正常行为开始。当我执行 Read-Host没有提示,我可以输入一个以感叹号开头的字符串: PS C:\> Read-Host | Foreach-Object { Write-Host 'En
我只是拼错了命令 git status 和 !git status 控制台显示它开始将最后克隆的存储库克隆到文件夹状态... 我的问题是,这个命令是什么意思,它有什么用途吗? 最佳答案 在 bash
这个问题在这里已经有了答案: What does an exclamation mark mean after the name of a function? (1 个回答) 关闭 2 年前。 Ju
我一直在 Magnolia code examples 中的 FreeMarker 代码末尾看到感叹号.例如: ${content.header!} 感叹号叫什么,它有什么作用? 最佳答案 感叹号称为
我环顾四周,找不到任何东西可以让我的脚本正确使用特殊字符(例如 ! 或 ; 或 ^) 在文件路径或文件名中。 我的脚本确实有效,但前提是上述字符不在任何扫描的文件夹或文件名中。如果任何文件夹或文件具有
我是一名优秀的程序员,十分优秀!