-extern void crule_free(char **elem);
-extern int crule_eval(char *rule);
-extern char *crule_parse(char *rule);
+/*
+ * opaque node pointer
+ */
+struct CRuleNode;
+
+extern void crule_free(struct CRuleNode** elem);
+extern int crule_eval(struct CRuleNode* rule);
+extern struct CRuleNode* crule_parse(const char* rule);