hoist parameter guards
add some builtin guard constructors