haskell - Haskell ' 符号有什么作用?
问题描述
正如标题所述,我在网上看到了变量/函数旁边有 ' 的代码片段,这是做什么/意味着什么?前任:
function :: [a] -> [a]
function ...
function' :: ....
解决方案
正如其他答案所说,function'
只是另一个变量名。所以,
don'tUse :: Int -> IO ()
don'tUse won'tBe''used'' = return ()
就像
dontUse :: Int -> IO ()
dontUse wontBeUsed = return ()
名称略有不同。唯一的要求是名称以小写字母或下划线开头,之后您可以使用任意数量的单引号字符。
Prelude> let _' = 1
Prelude> let _'' = 2
Prelude> let _''''''''' = 9
Prelude> _' + _'' * _'''''''''
19
...当然,这样命名变量不一定是个好主意;通常,在制作已命名事物的稍微不同版本时会使用此类素名。例如,foldl
andfoldl'
是具有相同签名的函数,它们基本上做相同的事情,只是严格性不同(这通常会影响性能内存使用以及是否允许无限输入,但不会影响实际结果)。
也就是说,对于这个问题
Haskell 这个
'
符号有什么作用?
– 该'
符号实际上也可以做其他各种事情,但只有当它不作为名称中的非前导字符出现时。
'a'
是字符文字。'Foo
是在类型级别上使用的构造函数。请参阅数据种类。'bar
并且''Baz
是引用的名称。请参阅TemplateHaskell。
推荐阅读
- php - 如何在 nginx 中为 PHP/Laravel 更改请求路径?
- qt - QML 对话框导致 Android 上的冻结(仅)。瞬态父级不能与窗口相同
- javascript - 我不断收到“未捕获的 TypeError:$(...).mask 不是函数:
- ios - 是否可以使用 Swift 5.1 工具链为我的 xcframework 库启用位码
- java - 我的代码在执行整个过程后返回执行先前的方法,而没有任何指令来执行此操作
- java - 如何在以下 Spring Boot 项目 twitter4j-spring-boot-sample 中启动测试类 SpringbootTwitter4jDemoApplicationTest?
- c++ - 符号查找错误:未定义符号:__atomic_load
- c# - .Net5:如何从 Program.cs 获取 EnvironmentName
- linux - 在 hvf MacOS 管理程序上使用 qemu 引导 Linux 时出现无效的操作码异常
- c++ - 为什么“gdb”会打印特定类的类方法?