Haskell类型错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haskell类型错误相关的知识,希望对你有一定的参考价值。

您好我是Haskel的新手,我正在尝试为我的项目编写一些代码,但是我一直收到以下错误:

ERROR file:.Lab1.hs:12 - Type error in application
*** Expression     : c c
*** Term           : c
*** Type           : Int
*** Does not match : a -> b

我的代码看起来像这样。我究竟做错了什么?

grade :: Int->Int->Int                           
grade a b 
    |((a < 0) || (a > 100) || (b < 0) || (b > 0)) = -1
    |(c > 47) && (a <= 47) = 47
    |(c > 47) && (a > 47) && (c <50) = 50
    |otherwise = c
    c where
    c = ((8 * a) `div` 10) + b
答案

我使用ghci尝试了你的代码,一旦我在它工作正常之前删除了c。

grade :: Int->Int->Int                           
grade a b 
 |((a < 0) || (a > 100) || (b < 0) || (b > 0)) = -1
 |(c > 47) && (a <= 47) = 47
 |(c > 47) && (a > 47) && (c <50) = 50
 |otherwise = c
 where
 c = ((8 * a) `div` 10) + b

此外,如果您打算只进入第一种情况,如果b不为零,我建议写这样的第一个条件

|((a < 0) || (a > 100) || (not (b==0))) = -1

以上是关于Haskell类型错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Haskell 中连接幻像类型中的元组?

Ghc:部分编译 Haskell 代码?

带有 Haskell 梁的简单 where 子句的类型错误

使用 haskell 读取和类型类 - 模棱两可的类型变量错误

在 Haskell 中编写 AI Solver 时的类型变量不明确

如何使用haskell类型系统来描述关系,从而防止出现更多错误