todo: duck_type