【发布时间】:2015-10-07 02:20:18
【问题描述】:
我是 Haskell 的新手,我一直在尝试制作此功能 g :: a -> b -> [(b,a)]。
我通过这个得到了类型结果[(b,a)](不完全是):
[(length a , a)].
从未正确地进行签名,尤其是从类型a 传递到b。
在这个特定的功能上将近 6 个小时无法弄清楚。有人能帮我吗? 请注意,我是一个真正的初学者,所以如果可能并且不要求太多,请坚持基础知识。 提前谢谢了。
【问题讨论】:
-
你的函数的目的是什么? g ab = repeat (b,a) 具有所需的类型,并返回由第二个参数和第一个参数组成的元组的无限列表。
-
几乎可以做任何我们想做的事,唯一的捕获必须有确切的签名。我不明白的是重复是如何从 a -> b -> [(b,a)] 开始的。非常感谢您的评论。
-
在 ghci 中,输入
:t repeat它会告诉你类型 (a -> [a]) ... 所以它接受一个类型并返回该类型的列表 .... 所以我们需要重复输入为 (b,a) 类型,它将返回类型 [(b,a)] -
嗯,
g a b = []的定义满足类型签名。这有帮助吗?注意——它可能不满足赋值条件,但是如果你声明g :: a -> b -> [(b,a)],类型检查器不会报错。 -
另外,这个问题不是很好...如果您不了解类型签名,请询问您对类型签名不了解的具体问题...。这将永远不会对其他人有用。
标签: function haskell types signature