         self.theme = themeWithId ?? theme
     }
 
+}
+
+
+public protocol Themeable: class {
+
+    associatedtype ThemeType: Theme
+
+    func apply(theme: ThemeType)
+
+}
+
+private final class FuncBox<T: Theme> {
+
+    typealias ThemingFn = (_ theme: T) -> Void
+
+    let apply: ThemingFn
+
+    init(_ fn: @escaping ThemingFn) {
+        self.apply = fn
+    }
 }
 
 


internal let ThemeNotification = Notification.Name("ThemeableDidSetTheme")
private let CurrentThemeIdentifier = "ThemeableCurrentThemeIdentifier"

public final class ThemeManager<T: Theme> {


    }

}
