函数组合错误
Function Composition Error
在阅读有关函数组合的教程时,我尝试了以下操作:
let prefixFun a b = a + "" + b;;
let exclaim s = s + "!";;
let bigHello = prefixFun >> exclaim;;
但是bigHello
的定义return出现了以下类型不匹配错误
let bigHello = prefixFun >> exclaim;;
----------------------------^^^^^^^
stdin(28,29): error FS0001: Type mismatch. Expecting a
'(string -> string) -> 'a'
but given a
'string -> string'
The type 'string -> string' does not match the type 'string'
- 错误是什么意思
- 根据我的理解,函数组合要求第一个函数的 return 类型与第二个函数的参数相同,我认为这里是正确的,因为
prefixFun
return s 字符串和 exclaim
需要字符串。
你能帮我理解并解决这个问题吗?
谢谢。
prefixFun
,在应用 one 参数后,不是 return 字符串。由于部分应用和函数套用,它 return 是一个函数,类型为 string -> string
。
这是>>
的实现:
let (>>) f g x = g ( f(x) )
请注意 f
仅应用于一个参数。
我感觉你想要的 bigHello
是一个函数,它接受某人的名字并在后面添加一个感叹号。这是您可以利用现有资源做的事情!
let bigHello = prefixFun "Hello " >> exclaim
请注意 prefixFun "Hello "
的类型为 string -> string
,
所以函数组合的规则被遵守了。
在阅读有关函数组合的教程时,我尝试了以下操作:
let prefixFun a b = a + "" + b;;
let exclaim s = s + "!";;
let bigHello = prefixFun >> exclaim;;
但是bigHello
的定义return出现了以下类型不匹配错误
let bigHello = prefixFun >> exclaim;;
----------------------------^^^^^^^
stdin(28,29): error FS0001: Type mismatch. Expecting a
'(string -> string) -> 'a'
but given a
'string -> string'
The type 'string -> string' does not match the type 'string'
- 错误是什么意思
- 根据我的理解,函数组合要求第一个函数的 return 类型与第二个函数的参数相同,我认为这里是正确的,因为
prefixFun
return s 字符串和exclaim
需要字符串。
你能帮我理解并解决这个问题吗?
谢谢。
prefixFun
,在应用 one 参数后,不是 return 字符串。由于部分应用和函数套用,它 return 是一个函数,类型为 string -> string
。
这是>>
的实现:
let (>>) f g x = g ( f(x) )
请注意 f
仅应用于一个参数。
我感觉你想要的 bigHello
是一个函数,它接受某人的名字并在后面添加一个感叹号。这是您可以利用现有资源做的事情!
let bigHello = prefixFun "Hello " >> exclaim
请注意 prefixFun "Hello "
的类型为 string -> string
,
所以函数组合的规则被遵守了。