【发布时间】:2013-03-07 13:16:11
【问题描述】:
是否可以在 Haskell 中实现一个返回自己函数名的函数?
可能的类型是(a -> b) -> String。
【问题讨论】:
-
没有。由于其多态类型,
(a -> b) -> String类型的函数无法检查其参数(超出seqing 或将其应用于底部)。因此它无法确定它的论点。 -
如果一个函数返回它自己的函数名,类型会不会是
() -> String(而且实现相当简单)? -
Haskell 中的大多数函数甚至没有名字。可能存在的东西是显示表达式类型的函数,尽管我怀疑这会非常有用。
-
如果你有这样的功能,你会用它做什么?您的问题可能有更简单的解决方案。
-
除了 Daniel Fischer 所说的之外,这将违反等式推理:
let f = id in findName f可能会产生"f",但findName id可能会产生"id"。这都与函数根本没有名称这一事实有关。变量可以在具有函数类型的范围内,仅此而已。
标签: haskell metaprogramming template-haskell