Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 使用Haskell签名通过不同类型创建函数_Function_Haskell_Types_Signature - Fatal编程技术网

Function 使用Haskell签名通过不同类型创建函数

Function 使用Haskell签名通过不同类型创建函数,function,haskell,types,signature,Function,Haskell,Types,Signature,我是Haskell的新手,我一直在尝试使用这个函数g::a->b->[(b,a)] 我通过以下方式获得了类型结果:[(b,a)](并非完全如此): [(长度a,a)] 从未正确制作签名,尤其是从类型a传递到b 在这个特殊的功能上花了将近6个小时,我无法理解它。有人能帮我吗? 请注意,我是一个真正的初学者,所以如果可能的话,不要要求太多,请坚持基本的。 非常感谢 也许您可以从一个更简单的类型开始 g' :: a -> b -> (b,a) 可以读取为g'接受两个参数并以相反顺序返回它

我是Haskell的新手,我一直在尝试使用这个函数
g::a->b->[(b,a)]

我通过以下方式获得了类型结果:
[(b,a)]
(并非完全如此):
[(长度a,a)]

从未正确制作签名,尤其是从类型
a
传递到
b

在这个特殊的功能上花了将近6个小时,我无法理解它。有人能帮我吗? 请注意,我是一个真正的初学者,所以如果可能的话,不要要求太多,请坚持基本的。
非常感谢

也许您可以从一个更简单的类型开始

g' :: a -> b -> (b,a)
可以读取为g'接受两个参数并以相反顺序返回它们的元组

现在,将其扩展到元组列表

g :: a -> b -> [(b,a)]
在列表中有一个简单的案例
[]
,一个单一的案例
[(b,a)]
和一个元素、无限的案例或任意数量的元素。比如说,

doublePair :: Int -> Int -> [(Int,Int)]
doublePair x y = [(y,x),(y,x)]

你的职责是做什么?g ab=repeat(b,a)具有所需类型,并在元组的无限列表中返回,该元组由第二个参数后跟第一个参数组成。几乎可以做任何我们想要的事情,唯一的捕获必须具有精确的签名。我不明白的是重复是如何从a->b->[(b,a)]开始的。非常感谢您的评论。在ghci中,键入
:t repeat
,它会告诉您键入(a->[a])。。。所以它接受一个类型并返回该类型的列表。。。。因此我们需要将输入重复为类型(b,a),它将返回类型[(b,a)],好的,定义
gab=[]
满足类型签名。这有用吗?注意-它可能不满足赋值条件,但是如果您声明
g::a->b->[(b,a)]
,类型检查器不会抱怨。此外,这个问题也不是很好。。。如果您不了解类型签名,请询问有关类型签名您不了解的内容的特定问题。。。。这对任何人都不会有用。谢谢@karakfa。顺便问一下,
=>
->
之间有什么区别,比如在
g::Ord a=>[a]->a->bool
中?你问的很有趣,今天回答了同样的问题,很好,明白了!谢谢