Haskell双字符串连接

时间:2016-05-19 05:26:19

标签: haskell

我从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”的类型有关。变量

如果有人可以帮助初学者,那将非常感激。如果您在代码中看到其他问题(或者如果我使用了错误的术语),请随时告诉我。

1 个答案:

答案 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