如何创建自己的函数,在Haskell中添加字符串和浮点数?

时间:2018-03-17 18:35:39

标签: haskell

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

不太明白我做错了什么?

1 个答案:

答案 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) => ...