diff --git a/packages/effect-fc/src/Component.ts b/packages/effect-fc/src/Component.ts
index a297b89..ab56dfa 100644
--- a/packages/effect-fc/src/Component.ts
+++ b/packages/effect-fc/src/Component.ts
@@ -90,13 +90,15 @@ export interface Memoized
{
export const memo: {
>(
propsAreEqual?: Equivalence.Equivalence>
- ): (self: T) => T & Memoized>
+ ): (
+ self: ExcludeKeys>>
+ ) => T & Memoized>
>(
- self: T,
+ self: ExcludeKeys>>,
propsAreEqual?: Equivalence.Equivalence>,
): T & Memoized>
} = Function.dual(2, >(
- self: T,
+ self: ExcludeKeys>>,
propsAreEqual?: Equivalence.Equivalence>,
): T & Memoized> => Object.assign(
Object.create(Object.getPrototypeOf(self)),
diff --git a/packages/example/src/todo/Todo.tsx b/packages/example/src/todo/Todo.tsx
index b7d1746..3a2495f 100644
--- a/packages/example/src/todo/Todo.tsx
+++ b/packages/example/src/todo/Todo.tsx
@@ -113,3 +113,4 @@ export const Todo = Component.make(function* Todo(props: TodoProps) {
})
const MemoizedTodo = Component.memo(Todo)
+const MemoizedTodo2 = Component.memo(MemoizedTodo)