例えばmapをばらしたときに

let rec map f ls = match ls with
[] -> []
| x::xs -> f x :: map f xs ;;

val : ('a -> 'b) -> 'a list -> 'b list = <fun>

たぶんこんな感じで再帰になってるけど
無名関数は再帰で書けないから
無名関数で書けたら汎関数でよい?