haskell - 无法将预期类型 Int 与 Haskell 中的实际类型 Int -> Int 匹配

标签 haskell

以下代码会产生错误:

power:: Int -> Int -> Int
power a b 
        | a ==0 || b == 0      = 0
        | otherwise   = power ((multiply a a) (b-1))

multiply:: Int -> Int -> Int
multiply a b
        | a <= 0        = 0
        | otherwise     = (multiply (a-1) (b)) + b

返回的错误是

power.hs:6:25:
    Couldn't match expected type `Int' with actual type `Int -> Int'
    In the return type of a call of `power'
    Probable cause: `power' is applied to too few arguments
    In the expression: power (multiply (a a) b - 1)
    In an equation for `power':
        power a b
          | b == 0 = 0
          | otherwise = power (multiply (a a) b - 1)

最佳答案

错误出现在表达式power ((multiply a a) (b-1))中。问题是那一对额外的括号。实际上,您只向 power 传递一个参数,即 ((multiply a a) (b-1))。该表达式本身无效,因为 (multiply a a) 的结果是 Int,它不能接受参数。

你应该将其重写为

| otherwise   = power (multiply a a) (b-1)

关于haskell - 无法将预期类型 Int 与 Haskell 中的实际类型 Int -> Int 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12540105/

相关文章:

haskell - 为什么 (Haskell) Repa 只使用一个 CPU?

haskell - 在 Haskell 中为状态传递风格编写辅助函数吗?

haskell : error while chaining function using monad

haskell - callCC是如何用严格的函数式语言实现的?

haskell - 无点案例

haskell - "overloading"能否通过 FlexibleInstances 返回不同的类型,或者匹配类型类?

haskell - 解释 GHC 堆配置文件中的悬崖边缘

haskell - Haskell 中的任意字符串生成器 (Test.QuickCheck.Gen)

docker - 构建没有堆栈的Docker镜像

csv - Haskell 木薯 (Data.Csv) : Ignore missing columns/fields