Чтобы использовать fix
, нужно написать рекурсивное определение в виде
map = .... something involving map ....
Затем мы даем
map = fix (\m -> .... something involving m ....)
Например,
map = \f xs -> case xs of
[] -> []
y:ys -> f y : map f ys
так
map = fix (\m f xs -> case xs of
[] -> []
y:ys -> f y : m f ys)
В качестве альтернативы, поскольку аргумент f
одинаков для каждого рекурсивного вызова, мы можем позволить
map f = \xs -> case xs of
[] -> []
y:ys -> f y : map f ys
и получите
map f = fix (\m xs -> case xs of
[] -> []
y:ys -> f y : m ys)