Похоже, у вас все правильно, f(g(x))
должно работать нормально. Я не уверен, почему у вас есть ключевое слово return
(это не ключевое слово в ocaml). Вот правильная версия,
let compose f g x = f (g x)
Определение типа для этого,
val compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun>
Каждый, 'a,' b, 'c являются абстрактными типами; нам все равно, кто они, они просто должны быть последовательными в определении (поэтому область g
должна находиться в диапазоне f
).
let x_plus_x_plus_1 = compose (fun x -> x + 1) (fun x -> x * 2)