# 1 Definition

This is an eager variant of the fixpoint combinator:

```
fun fix[T] (f:(T->T)->T->T) (x:T) : T => f (fix f) x;
```

To use this combinator we need to define a function with open recursion first:

fun factabs (fact:int->int) (x:int) : int => match x with | 0 => 1 | x => x * fact (x - 1) endmatch ;

This function is a flat function which accepts an arbitrary function
of type `int->int`

as an argument. It is intended to accept its own
body as an argument. So next we have to close the recursive knot
with the fixpoint combinator:

```
var fact = fix factabs;
```

We can check this is indeed the factorial function with a sample application:

```
println$ fact 5;
```

120