The function `fix` should take as argument a function `f``'` and return a function `f` so that `f`` ``x` is equal to `f``' ``f`` ``x`. The solution is to store `f` in a reference `r`. We temporarily create the reference `r` with a dummy function (that is not meant to be used). Assuming that the reference will later contain the correct version of `f`, we can define `f` as `fun`` ``x`` -> ``f``' !``r`` ``x`. Hence, the following solution:

 let fix f' = let r = ref (fun _ -> raise (Failure "fix")) in let f x = f' !r x in r := f; !r;;

 val fix : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b =
Note that the exception should never be raised because the content of the reference is overridden by `f` before being reference is used.

We could also use the option type to initialized the content of the reference to `None` and replace it later with `Some`` ``f`. However, would not avoid raising an exception if the value of the reference where to be `None` when being read, even though this situation should never occur dynamically in a correct implementation.

As an example, we define the factorial function:

 let fact' fact n = if n > 0 then n * fact (n-1) else 1 in fix fact' 6;;

 - : int = 720