FWIW, I think you could just define an elemental type-bound function in your module for them:
elemental real(rk) function left(self,celli)
class(grid), intent(in) :: self
integer, intent(in) :: celli
left = self%edges(celli-1)
end function left
This will be inlined by any compilers, and lets you avoid the pointer thing at all.