在Haskell中接收或返回函数的函数的语法

时间:2017-03-13 23:58:36

标签: haskell types syntax

我正在通过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))]

但我得到了同样的错误。那么一般来说,涉及对的排版函数如何工作呢?

1 个答案:

答案 0 :(得分:4)

您的问题不是格式化问题。 Int aInt b是不公平的。无法应用Int,因为它不是(类型级别)函数。你只想要Int -> [(Int, Int)]