diff --git a/examples/glue.c b/examples/glue.c
index 1c86b15dfabba905de6bbca122dc126d4b06a2c6..778f356a2db9f55b7cc10907db1b4d4a76fa4613 100644
--- a/examples/glue.c
+++ b/examples/glue.c
@@ -57,7 +57,7 @@ const HParsedToken *h_seq_flatten(HArena *arena, const HParsedToken *p)
   case TT_SEQUENCE:
     // Flatten and append all.
     for(size_t i; i<p->seq->used; i++) {
-	  h_seq_append(ret, h_seq_flatten(arena, h_seq_index(p, i)));
+	  h_seq_append(ret, h_seq_flatten(arena, h_seq_index_token(p, i)));
 	}
 	break;
   default:
@@ -99,16 +99,16 @@ HParsedToken *h_carray_index(const HCountedArray *a, size_t i)
   return a->elements[i];
 }
 
-HParsedToken *h_seq_index(const HParsedToken *p, size_t i)
+HParsedToken *h_seq_index_token(const HParsedToken *p, size_t i)
 {
   assert(p != NULL);
   assert(p->token_type == TT_SEQUENCE);
   return h_carray_index(p->seq, i);
 }
 
-void *h_seq_index_user(HTokenType type, const HParsedToken *p, size_t i)
+void *h_seq_index(HTokenType type, const HParsedToken *p, size_t i)
 {
-  HParsedToken *elem = h_seq_index(p, i);
+  HParsedToken *elem = h_seq_index_token(p, i);
   assert(elem->token_type == (HTokenType)type);
   return elem->user;
 }
diff --git a/examples/glue.h b/examples/glue.h
index c8b17f38004450727623f314ef6543bac34fc2e6..5716197bb09911f02fc4f815e56687b3ebb2ab96 100644
--- a/examples/glue.h
+++ b/examples/glue.h
@@ -43,34 +43,40 @@ const HParsedToken *h_act_flatten(const HParseResult *p);
 // Working with HParsedTokens
 //
 
+// Standard short-hand for arena-allocating a variable in a semantic action.
+#define H_ALLOC(TYP) \
+  ((TYP *) h_arena_malloc(p->arena, sizeof(TYP)))
+
 // Token constructors...
 
 HParsedToken *h_make(HArena *arena, HTokenType type, void *value);
 HParsedToken *h_make_seq(HArena *arena);
 
-#define H_ALLOC(TYP) \
-  ((TYP *) h_arena_malloc(p->arena, sizeof(TYP)))
-
-#define H_MAKE(TYP, VAL) \
-  h_make(p->arena, TT_ ## TYP, VAL)
+// Standard short-hand to make a user-type token.
+#define H_MAKE(TYP, VAL) h_make(p->arena, TT_ ## TYP, VAL)
 
 // Sequences...
 
-// Flatten nested sequences into one.
-const HParsedToken *h_seq_flatten(HArena *arena, const HParsedToken *p);
+// Access a sequence element by index.
+HParsedToken *h_seq_index_token(const HParsedToken *p, size_t i);
 
-void h_seq_snoc(HParsedToken *xs, const HParsedToken *x);
-void h_seq_append(HParsedToken *xs, const HParsedToken *ys);
+// Access a user-type element of a sequence by index.
+#define H_SEQ_INDEX(TYP, SEQ, IDX) \
+  ((TYP *) h_seq_index(TT_ ## TYP, SEQ, IDX))
 
-HParsedToken *h_carray_index(const HCountedArray *a, size_t i); // XXX -> internal
-HParsedToken *h_seq_index(const HParsedToken *p, size_t i);
-void *h_seq_index_user(HTokenType type, const HParsedToken *p, size_t i);
+// Standard short-hand to access a user-type field on a sequence token.
+#define H_FIELD(TYP, IDX)  H_SEQ_INDEX(TYP, p->ast, IDX)
 
-#define H_SEQ_INDEX(TYP, SEQ, IDX) \
-  ((TYP *) h_seq_index_user(TT_ ## TYP, SEQ, IDX))
+// Append elements to a sequence.
+void h_seq_snoc(HParsedToken *xs, const HParsedToken *x);     // append one
+void h_seq_append(HParsedToken *xs, const HParsedToken *ys);  // append many
 
-#define H_FIELD(TYP, IDX) \
-  H_SEQ_INDEX(TYP, p->ast, IDX)
+// Flatten nested sequences into one.
+const HParsedToken *h_seq_flatten(HArena *arena, const HParsedToken *p);
+
+// Helpers for implementing H_SEQ_INDEX.
+void *h_seq_index(HTokenType type, const HParsedToken *p, size_t i); // XXX helper
+HParsedToken *h_carray_index(const HCountedArray *a, size_t i); // XXX -> internal
 
 
 #endif