I got trouble to understand this line:
combs val = [] : concatMap (\w -> map (:w) val) (combs val)
The purpose is to create all combinations possible. It is an infinite list. (combs :: [a] -> [[a]])
I don't understand the anonymous function: \w -> map (:w) val
What does (:w) mean? What kind of mapping function is that? In my perception \w must be a list? Is it a concatination? I am confused.