diff --git a/Sources/HTMLTokenPolicy.h b/Sources/HTMLTokenPolicy.h
index 54ee6f9..519ea1a 100644
--- a/Sources/HTMLTokenPolicy.h
+++ b/Sources/HTMLTokenPolicy.h
@@ -7,7 +7,16 @@
//
#import
+#import "HTMLTokens.h"
+
+NS_ASSUME_NONNULL_BEGIN
@interface HTMLTokenPolicy : NSObject
++ (instancetype)policy:(nullable HTMLToken * (^)(HTMLToken *))block;
+
+- (nullable HTMLToken *)apply:(HTMLToken *)token;
+
@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Sources/HTMLTokenPolicy.m b/Sources/HTMLTokenPolicy.m
index c03bc98..06fb098 100644
--- a/Sources/HTMLTokenPolicy.m
+++ b/Sources/HTMLTokenPolicy.m
@@ -8,6 +8,31 @@
#import "HTMLTokenPolicy.h"
+@interface HTMLTokenPolicy()
+{
+ HTMLToken * (^ _policyBlock)(HTMLToken *);
+}
+@end
+
@implementation HTMLTokenPolicy
++ (instancetype)policy:(HTMLToken * _Nullable (^)(HTMLToken * _Nonnull))block
+{
+ return [[HTMLTokenPolicy alloc] initWithBlock:block];
+}
+
+- (instancetype)initWithBlock:(HTMLToken * _Nullable (^)(HTMLToken * _Nonnull))block
+{
+ self = [super init];
+ if (self) {
+ _policyBlock = block;
+ }
+ return self;
+}
+
+- (HTMLToken *)apply:(HTMLToken *)token
+{
+ return _policyBlock(token);
+}
+
@end