haskell - '@' 在 Haskell 中是什么意思?

标签 haskell at-sign

我试过用谷歌搜索,但结果很短。我通过阅读一些文章来加深我的 Haskell 知识,我遇到了一篇使用我以前从未见过的语法的文章。
一个例子是:

reconstruct node@(Node a b c l r) parent@(Node b d le ri)

我以前从未见过这些@。我尝试在网上搜索答案,但没有找到答案。这只是一种嵌入标签以帮助使事情更清晰的方法,还是它们对代码有实际影响?

最佳答案

它用于模式匹配。现在node变量将引用整个 Node参数 Node a b c l r 的数据类型.因此,不要以 Node a b c l r 的形式传递给函数, 你可以使用 node而不是传递它。

一个更简单的示例来演示它:

data SomeType = Leaf Int Int Int | Nil deriving Show

someFunction :: SomeType -> SomeType
someFunction leaf@(Leaf _ _ _) = leaf
someFunction Nil = Leaf 0 0 0
someFunction也可以写成:
someFunction :: SomeType -> SomeType
someFunction (Leaf x y z) = Leaf x y z
someFunction Nil = Leaf 0 0 0

看看第一个版本有多简单?

关于haskell - '@' 在 Haskell 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30326249/

相关文章:

Haskell - 实现 Monoid 如果运算符不是关联的会发生什么

algorithm - 将命令式 for 循环转换为惯用的 haskell

syntax - Octave 中变量前面的@符号的目的是什么?

svn - 如何在 Subversion 中 move/重命名包含 @ 字符的文件

algorithm - Haskell 中的 Maze Solver - 确定迷宫是否无法解决

haskell - 在 Haskell 中定义一个函数,如果它是由 'a' 组成的列表,则返回 true,否则返回 false

list - Haskell:在列表和元组之间

windows - 批处理文件中的 at 符号 (@) 是什么,它有什么作用?

带有 at 符号的 URL 被截断