recursion and dsls