diff --git a/src/hammer.c b/src/hammer.c
index fb3d62a9ece0a7c920f3d5e124844bd704aa0935..6f60c959dbb965c3d62e0fbef446e2062a9cd2e7 100644
--- a/src/hammer.c
+++ b/src/hammer.c
@@ -744,7 +744,6 @@ const parser_t* epsilon_p() {
   return res;
 }
 
-
 static parse_result_t* parse_indirect(void* env, parse_state_t* state) {
   return do_parse(env, state);
 }
@@ -759,7 +758,17 @@ parser_t* indirect() {
   return res;
 }
 
+typedef struct {
+  predicate_t pred;
+} attr_bool_t;
+
+static parse_result_t* parse_attr_bool(void *env, parse_state_t *state) {
+
+
+}
+
 const parser_t* attr_bool(const parser_t* p, attr_bool_t a) { return &unimplemented; }
+
 const parser_t* and(const parser_t* p) { return &unimplemented; }
 
 static parse_result_t* parse_not(void* env, parse_state_t* state) {
diff --git a/src/hammer.h b/src/hammer.h
index c3c2cf7b183caf684f8ef9b83358e95c7f838f85..915f7ac35760324404316a3e06bdd83481aa3000 100644
--- a/src/hammer.h
+++ b/src/hammer.h
@@ -78,7 +78,7 @@ typedef struct parse_result {
 typedef parse_result_t* (*action_t)(parse_result_t *p);
 
 /* Type of a boolean attribute-checking function, used in the attr_bool() parser. */
-typedef int (*attr_bool_t)(void *env);
+typedef int (*predicate_t)(parse_result_t *p);
 
 typedef struct parser {
   parse_result_t* (*fn)(void *env, parse_state_t *state);