【发布时间】:2015-10-06 04:34:05
【问题描述】:
我正在做一个 haskell 项目,并且有一个 minmax 函数,它可以获取列表的最小值和最大值,并以元组对的形式返回它们,如下所示:
λ> minmax [1,2,3]
(1,3)
λ> minmax [4,2,5,9]
(2,9)
现在我正在实现一个递归循环的用户输入列表,直到输入取消输入,然后列表完成,然后需要利用我的 minmax 函数,我遇到的问题是它显然不是同一类型完成后的简单列表,因为它会引发类型错误。
minmax :: (Ord a) => [a] -> (a,a)
minmax [] = error "Null"
minmax (x:xs) = (minimum (x:xs), maximum (x:xs))
convertIO :: IO Int
convertIO = do
line <- getLine
return (read line :: Int)
minmaxlist :: IO [Int]
minmaxlist = do
number <- convertIO
if(number /= 0)
then (do
int_list <- minmaxlist
return (minmax (number:int_list)))
else return []
向我抛出了这个特定的错误:
Couldn't match expected type `[Int]' with actual type `(Int, Int)'
虽然整数列表正是我通过 (number:int_list) 传递的内容,但如果我确实将整数列表传递给它,它会返回元组。为什么它在这里向我抛出错误?是不是跟 IO 类型有关系?
【问题讨论】:
标签: haskell types io typeerror