我从Haskell开始,创建了以下两个函数:
calcBmi :: ( RealFloat a ) => a -> a -> a -- Accepts two and returns one 'RealFloat' number.
calcBmi w h = w / h ^ (2 :: Integer) -- Stores argument one and two in w and h respectively and evaluates
outputBmi :: (RealFloat a) => a -> a -> String -- Accepts two RealFloats and returns string
outputBmi weight height = let bmi = calcBmi weight height in "Your BMI was calculated to " ++ bmi
当我尝试编译此代码时,我得到以下异常
无法匹配预期类型' [Char]'实际类型' a'
在'(++)'的第二个论点中,即' bmi'
我对这个错误甚至意味着什么感到困惑,从不关心如何修复代码以正确编译。我只能假设它与“bmi”的类型有关。变量
如果有人可以帮助初学者,那将非常感激。如果您在代码中看到其他问题(或者如果我使用了错误的术语),请随时告诉我。
答案 0 :(得分:3)
变量不是字符串,因此(++)函数不能使用它。通常,您可以使用show
将其转换为String,但是,您的类型未指定a
是类Show
的实例,因此您可能需要添加此项,或者甚至直接指定类型(ie- Float
)
例如,您可以更改calcBmi的类型
calcBmi :: Float->Float->Float
或
calcBmi :: (RealFloat a, Show a)=>a->a->a
然后你可以按如下方式创建一个字符串
"Your BMI was calculated to " ++ show bmi