功能组合错误

jus*_*ive 0 f# functional-programming function-composition

在阅读有关函数组合的教程时,我尝试了以下内容:

let prefixFun a b = a + "" + b;;
let exclaim s = s + "!";;
let bigHello = prefixFun >> exclaim;;
Run Code Online (Sandbox Code Playgroud)

但是定义bigHello返回以下类型不匹配错误

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'
Run Code Online (Sandbox Code Playgroud)
  1. 这个错误意味着什么
  2. 根据我的理解,函数组合要求第一个函数的返回类型与第二个函数的参数相同,我认为这是正确的,因为prefixFun返回字符串并exclaim期望字符串.

你能帮我理解并解决问题吗?

谢谢.

小智 5

prefixFun,应用一个参数后,不返回字符串.它返回一个函数,string -> string由于部分应用和函数currying而具有类型.

这是执行>>:

let (>>) f g x = g ( f(x) )

请注意,f它仅适用于一个参数.

我有一种感觉,你想要的bigHello是一个功能,取一个人的名字,然后添加一个感叹号.以下是您可以使用的内容!

let bigHello = prefixFun "Hello " >> exclaim

请注意,它prefixFun "Hello "具有类型string -> string,因此遵循功能组合的规则.