私はlikeso逆の機能を定義した場合:入力チェックをしませんOCamlの型システムの微妙:多型、pointfree逆、およびネストされたリスト
let reverse =
let rec helper out = function
| [] -> out
| a :: l -> helper (a :: out) l
in helper []
その後
reverse (List.map reverse xs)
、エラーでの
Error: This expression has type 'a list list
but an expression was expected of type 'a list
The type variable 'a occurs inside 'a list
しかし、それを明示的な引数で定義します。
let reverse l =
let rec helper out = function
| [] -> out
| a :: l -> helper (a :: out) l
in helper [] l
が動作します。
ここでは何が起こっていますか?