function - 类型的表达式
问题描述
我需要找到一个 Haskell 函数的表达式。函数:测试 :: (c,b,c) -> (b,c,b)
我的代码当然不起作用,因为有“'c' 的定义冲突”。
test (c,b,c) = (b, c, b)
解决方案
如评论中所述,如果您愿意
test :: forall b c. (c, b, c) -> (b, c, b)
(forall
添加强调)
然后你实际上不能对元组中的值做任何事情,因为你对它们各自的类型一无所知。所以这个函数仅有的两个(非底部)可能的实现是
test (c, b, _) = (b, c, b)
-- or
test (_, b, c) = (b, c, b)
结果元组的第一个和第三个元素只能是b
,因为这是您拥有的唯一适当类型的值。第二个值可以是第一个或第三个原始值。
当然,如果您允许bottom,那么您可以编写大量无意义的函数。
test (a, b, c) = test (c, b, a)
test _ = undefined
test _ = error "Yup, this is definitely a tuple"
test (_, b, c) = (b, c, undefined)
这些都不是非常有意义,但它们会进行类型检查。但是,出于所有实际目的,只有两个非底部示例是有趣的。
推荐阅读
- scala - na.replace 是否有任何替代方法,其中要替换的字符串的数据类型和替换可以不同?
- java - 使用 QueryDSL 对 Oracle 数据库进行高效分页
- jenkins - 詹金斯订书机请求失败,没有有效的面包屑
- css - CSS动画播放不流畅
- javascript - 使用完整日历模块在 Moodle 中使用 requirejs 找到彼此时遇到问题
- spring - 无法解析 OpenID 配置 spring boot (security) java.net.ConnectException: Connection denied: connect
- html - 如何使用 HTML、CSS 或/和 Bootstrap 获取 Gmail 中的邮箱列表?
- r - 用于汇总统计信息的动态仪表板和 R 中 DF 的选定/所有变量下拉列表
- autosar - 如何在 AUTOSAR 中配置 NVM?
- windows - 如何根据PowerShell中的条件删除文件