Haskell Guard方法打印成绩

Haskell Guard method to print the grade

我是 Haskell 编程新手,我需要使用 Guard 根据标记打印成绩。请找到以下代码。

我遇到编译器错误,如能提供任何帮助,我们将不胜感激。

Couldn't match expected type ‘Integer -> String’
                  with actual type ‘[Char]’
    • In the expression: "MediumPass"
      In an equation for ‘printMarks’:
          printMarks mark
            | mark >= 50 && mark <= 59 = "MediumPass"
            | mark >= 60 && mark <= 69 = "High Pass"
            | mark >= 80 && mark <= 100 = "Distinction"
            | otherwise = error "invalid mark"

代码:

printMarks :: Integer -> Integer -> String

printMarks mark | mark >= 50 && mark <= 59 = "MediumPass"
                | mark >= 60 && mark <= 69 = "High Pass"
                | mark >= 80 && mark <= 100 = "Distinction"
                | otherwise = error "invalid mark" 

main = do
    putStrLn "Printing Grade"
    print(printMarks 51)

printMarks 的类型应该是 Integer -> String 而不是 Integer -> Integer -> String 因为 printMarks 需要一个 Integer 并产生一个 String

printMarks :: Integer -> String

printMarks mark
    | mark >= 50, mark <= 59  = "MediumPass"
    | mark >= 60, mark <= 69  = "High Pass"
    | mark >= 80, mark <= 100 = "Distinction"
    | otherwise               = error "invalid mark" 

main = do
    putStrLn "Printing Grade"
    print(printMarks 51)

输出

tarptaeya@Anmols-MBP Temp % runghc foo.hs 
Printing Grade
"MediumPass"

在Haskell中f :: a -> b -> c意味着如果你用a类型的对象调用f,那么它将return一个return类型的函数=21=].