Here's a luamplib version (LuaLatex + Metapost) while you are waiting for xypic debugging assistance...

With comments in-line:
\documentclass[border=5mm]{standalone}
\usepackage{fontspec}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
u := 10mm; % unit scale
z.A = origin; % points for each bullet
z.B = (2u,0);
z.C = (3u,0);
z.D = (4u,0);
z.E = (7u,0);
z.F = (8u,0);
z.G = (10u,0);
z.H = (11u,0);
% define two handy arrow paths,
path arrow_away, arrow_into;
arrow_away = origin -- right scaled 2u rotated 57;
arrow_into = arrow_away shifted - point 1 of arrow_away;
% make the arrow heads narrower
ahangle := 30;
% draw dots and away arrows
forsuffixes $=A,B,D,F:
drawdot z$ withpen pencircle scaled 3;
drawarrow subpath (0.1, 0.9) of arrow_away shifted z$;
label.ulft("$" & str $ & "$", point 0.5 of arrow_away shifted z$);
endfor
% draw dots and into arrows
forsuffixes $=C,E,G,H:
drawdot z$ withpen pencircle scaled 3;
drawarrow subpath (0.1, 0.9) of arrow_into shifted z$;
label.lrt("$" & str $ & "$", point 0.5 of arrow_into shifted z$);
endfor
% macro to save typing
vardef connect(expr a, b) =
drawarrow a--b cutbefore fullcircle scaled 0.4u shifted a
cutafter fullcircle scaled 0.4u shifted b;
enddef;
connect(z.A,z.B);
connect(z.B,z.C);
connect(z.C,z.D);
connect(z.D,z.E);
connect(z.E,z.F);
connect(z.F,z.G);
connect(z.G,z.H);
% do the loop connection separately
drawarrow z.H { right } .. { left }
point 1 of arrow_away shifted z.H shifted 5 right
--
point 1 of arrow_away shifted z.A shifted 5 left
{ left } .. { right } z.A
cutbefore fullcircle scaled 0.4u shifted z.H
cutafter fullcircle scaled 0.4u shifted z.A;
endfig;
\end{mplibcode}
\end{document}
If you prefer a less slanted style of curve you could replace the go-around arrow with this:
drawarrow halfcircle rotated -90 shifted 1/2 up scaled 1.7u shifted z.H --
halfcircle rotated +90 shifted 1/2 up scaled 1.7u shifted z.A
cutbefore fullcircle scaled 0.4u shifted z.H
cutafter fullcircle scaled 0.4u shifted z.A;
to get:
