A Haskell DSL to express dependencies between objects