麻烦与Haskell条件

vpo*_*hok 1 haskell conditional-statements

我是Haskell的初学者,在下一个街区遇到麻烦:

up_heap :: Num a => [a] -> [a] -> [a]
up_heap heap (h:t) =
let ppos = quot (length heap) 2 in
        case ((ppos > 0) && ((heap !! ppos) > h)) of
            True ->
                let (upper, (p:lower)) = splitAt ppos heap in
                    up_heap upper (h:lower) ++ (p:t)
            False ->
                heap ++ h:t
Run Code Online (Sandbox Code Playgroud)

下一个错误:无法推断(Ord a)因使用">"而产生

怎么改进这个?

tho*_*ron 6

您正在使用>其元素heap类型Num a => a(元素).>Ord类型类的一部分,你可以在文档中看到(http://hackage.haskell.org/packages/archive/base/3.0.3.1/doc/html/GHC-Num.html),类型实现Num不必须实施Ord.

class (Eq a, Show a) => Num a where
Run Code Online (Sandbox Code Playgroud)

在类型签名中添加约束,如(Num a, Ord a) => ....