我在Haskell中创建一个递归的合并排序函数.作为评估的一部分,我被告知必须将类型定义为:
isort :: Ord a => [a] -> [a]
我假设函数需要一个数组作为输入并输出一个数组.我知道那ord
是一堂课.
在上面的上下文中是什么Ord a
意思?
这是我的功能:
isort :: Ord a => [a] -> [a] isort [x] = [x] isort (x:xs) = insert x (isort xs) where insert :: Int -> [Int] -> [Int] insert a [] = [] insert a (b:c) | a < b = a:b:c | otherwise = b : insert a c
当我尝试将我的函数文件加载到ghci时,我收到错误:
Couldn't match type ‘a’ with ‘Int’ ‘a’ is a rigid type variable bound by the type signature for isort :: Ord a => [a] -> [a] at LabSheet2.hs:17:10 Expected type: [a] Actual type: [Int] ...
ryachza.. 7
这Ord a
是一个类型类约束,表明你的函数适用于任何类型a
,只要a
是可比较的(Ord
可用的).你得到的错误信息是由于你的外部声明之间的冲突,它说它适用于任何人Ord a => a
,而内部insert
"只"适用于Int
.
这Ord a
是一个类型类约束,表明你的函数适用于任何类型a
,只要a
是可比较的(Ord
可用的).你得到的错误信息是由于你的外部声明之间的冲突,它说它适用于任何人Ord a => a
,而内部insert
"只"适用于Int
.