为什么运算符和操作数的类型不匹配?

时间:2012-10-04 14:33:45

标签: sml smlnj

为什么有一个tycon不匹配运算符和操作数不同意错误?对解决方案的任何建议?

fun reve (x:string) = implode o rev o explode x

1 个答案:

答案 0 :(得分:2)

问题在于,函数应用程序的绑定强于o

即,它被解释为:

fun reve x = implode o rev o (explode x);

由于explode xchar list而不是函数,因此会失败。

您可以通过正确放置括号来解决此问题

fun reve x = (implode o rev o explode) x;

或者用无点符号书写:

val reve = implode o rev o explode

也可以定义一个右关联函数应用程序操作符,通常称为$,它可以在没有括号的情况下执行您想要的操作:

(* Right-associative function application *)
infixr $
fun f $ x = f x;

fun reve x = implode o rev o explode $ x