我正在通过Learn You a Haskell学习Haskell,我很确定他在某些时候已经过了这个但我无法弄清楚在哪里。假设我想要一个函数返回一对,一对对,或一般元组。如何写出这种类型的签名?例如,对于某些给定的偶数,我想返回加起来的唯一素数对的列表。我有一个函数isPrime
,它告诉我Int
是否是素数。
pairs :: Int -> [(Int a, Int b)]
pairs n
| n < 4 = []
| odd n = []
| otherwise = [(a, b) | a < b, isPrime a, isPrime b, a+b == 1]
当我尝试编译它时,我得到的错误是“Int的参数太少了”。所以我尝试了以下语法:
pairs :: Int -> [((Int a), (Int b))]
但我得到了同样的错误。那么一般来说,涉及对的排版函数如何工作呢?
答案 0 :(得分:4)
您的问题不是格式化问题。 Int a
和Int b
是不公平的。无法应用Int
,因为它不是(类型级别)函数。你只想要Int -> [(Int, Int)]
。