タイコン不一致演算子とオペランドが一致しないエラーがあるのはなぜですか? 解決策の提案はありますか?
fun reve (x:string) = implode o rev o explode x
問題は、関数の適用が よりも強くバインドされることにありますo
。
つまり、次のように解釈されます。
fun reve x = implode o rev o (explode x);
explode x
は関数ではなく関数であるためchar 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