The loop operator expresses computations in which an output
value is fed back as input, although the computation occurs only once.
It underlies the rec value recursion construct in arrow
notation. loop should satisfy the following laws:
extensionloop (arr f) =
arr (\ b -> fst (fix (\ (c,d) -> f
(b,d))))