implement copy/assign
add helper to construct mlp