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

Using Haskell signature to create function through different types

我是 Haskell 的新手,我一直在尝试实现此功能 g :: a -> b -> [(b,a)]

我通过这个得到了类型结果 [(b,a)](不完全): [(length a , a)].

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

将近 6 个小时在这个特定的函数上无法弄清楚。有人能帮我吗? 请注意,我是一个真正的初学者,所以如果可能并且要求不高,请坚持基础知识。 提前谢谢了。

也许你可以从更简单的类型开始

g' :: a -> b -> (b,a)

可以理解为 g' 接受两个参数,returns 它们的元组以相反的顺序排列。

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

g :: a -> b -> [(b,a)]

存在简单情况 []、单例情况 [(b,a)] 具有单个元素、无限情况或列表中任何其他任意数量的元素。例如,

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