converted to monadic uniplate functions