it seems like the code in the different type variants of eigen_spmat are identical except for the module containing the eigen-wrapping c functions they reference? could that code be written once as a module functor with the appropriate Eigen_types module passed in? is there a reason why it isn't structured that way?