Lear ingredientes Haskell和我正在尝试使用类型声明添加字符串和浮点数。我认为这是内置于Haskell,但我想挑战自己,以便我能理解事情是如何更深入的,下面是我所拥有的,但我得到并且错误地说。
Prelude> addFloat "3.14" 1.6
<interactive>:7:1: error:
* No instance for (Num [Char]) arising from a use of `addFloat'
* In the expression: addFloat "3.14" 1.6
In an equation for `it': it = addFloat "3.14" 1.6
<interactive>:7:17: error:
* No instance for (Fractional [Char])
arising from the literal `1.6'
* In the second argument of `addFloat', namely `1.6'
In the expression: addFloat "3.14" 1.6
In an equation for `it': it = addFloat "3.14" 1.6
Prelude>
这是我的代码:
addFloat :: (String a) => a -> Float -> a
addFloat x y = x + y
不太明白我做错了什么?
答案 0 :(得分:2)
Haskell从不自动执行类型转换。如果要将字符串转换为浮点数,则需要明确使用read
。
addFloat :: String -> Float -> Float
addFloat x y = read x + y
(我不确定这对于一个功能是个好主意。)
如果需要字符串作为输出,请将生成的float转换为字符串
addFloat :: String -> Float -> String
addFloat x y = show (read x + y)
此外,String
是一种类型,而不是类型类,因此您无法编写(String a) => ...
。