use std::function to hold pedigree ops