I agree with Adam.. DSLs always ends up being half baked programming languages... just look at any serious terraform code base.. the kind of circus one has to do to achieve something non-trivial is laughably hard... and circular dependency.. sometimes.. you'll have to run the terraform code twice for it to get working... let's call it temporal dependency.. sometimes it's impossible to get the value of dependency at all dynamically.. With declarative languages people always forget about time.. time is a reality.. you have to take it into account.. Anyway great stimulating talk.. thanks for this. Kudos!