String 哈斯凯尔:“这是一个很好的例子。”;改为;函数不';“t手柄”+&引用;对于不同的类型?
这个没问题,没问题String 哈斯凯尔:“这是一个很好的例子。”;改为;函数不';“t手柄”+&引用;对于不同的类型?,string,haskell,String,Haskell,这个没问题,没问题 Prelude> read "8.2" + 3.4 11.6 但是这个不行 Prelude> read "8.2"+"3.4" <interactive>:69:11: No instance for (Num [Char]) arising from a use of ‘+’ In the expression: read "8.2" + "3.4" In an equation for ‘it’: it = read "8.2" + "3.4"
Prelude> read "8.2" + 3.4
11.6
但是这个不行
Prelude> read "8.2"+"3.4"
<interactive>:69:11:
No instance for (Num [Char]) arising from a use of ‘+’
In the expression: read "8.2" + "3.4"
In an equation for ‘it’: it = read "8.2" + "3.4"
为什么??我试过:
read "8.2"::Float + 3.4 ::Float
也不行
“读取”的输入要求是什么?第一个字符串,另一个无字符串,为了做数学运算?你认为read在这行的其余部分起作用的假设是错误的
read :: Read a => String -> a
它只接受应用到的字符串,而不是它后面的所有内容,请尝试
(read "3.5") + (read "3.5") :: Float
请注意括号,我还建议大家看一看——haskell的完整介绍
不起作用,因为您尝试添加字符串(读取“8.2”+“3.4”
),编译器告诉您“3.4”
期望左侧和右侧相等,所以它为+
字符串(又称
)寻找一个加号实例,因为[Char]
的右侧就是加号+
不起作用,因为对于未指定的read“8.2”+34
类型(Num
),Haskell默认为34::Num a=>a
),因此它尝试将Integer
解析为整数,但由于整数中没有点,因此失败“8.2”
- 最后一个几乎是正确的,您只需添加paren即可使其工作(见上文)
+
的参数必须具有相同的类型
(+) :: Num a => a -> a -> a
类型签名表示:“数字”(如果您了解java,它类似于一个接口)可以使用+
函数,并且第一个、第二个参数以及结果的类型相同
如果你想进行转换,你必须手动/显式地进行转换。你认为read对行的其余部分有效的假设是错误的
read :: Read a => String -> a
它只接受应用到的字符串,而不是它后面的所有内容,请尝试
(read "3.5") + (read "3.5") :: Float
请注意括号,我还建议大家看一看——haskell的完整介绍
不起作用,因为您尝试添加字符串(读取“8.2”+“3.4”
),编译器告诉您“3.4”
期望左侧和右侧相等,所以它为+
字符串(又称
)寻找一个加号实例,因为[Char]
的右侧就是加号+
不起作用,因为对于未指定的read“8.2”+34
类型(Num
),Haskell默认为34::Num a=>a
),因此它尝试将Integer
解析为整数,但由于整数中没有点,因此失败“8.2”
- 最后一个几乎是正确的,您只需添加paren即可使其工作(见上文)
+
的参数必须具有相同的类型
(+) :: Num a => a -> a -> a
类型签名表示:“数字”(如果您了解java,它类似于一个接口)可以使用+
函数,并且第一个、第二个参数以及结果的类型相同
如果要进行转换,必须手动/显式进行转换