Moved effect specification inside the DSL, to allow reasoning about it at the type level