diff --git a/packages/extension-form/src/internal/Form.ts b/packages/extension-form/src/internal/Form.ts
index 209ac4f..ad621d8 100644
--- a/packages/extension-form/src/internal/Form.ts
+++ b/packages/extension-form/src/internal/Form.ts
@@ -1,6 +1,46 @@
-import type { Schema } from "effect"
+import { Schema, SubscriptionRef } from "effect"
export interface Form {
readonly schema: Schema.Schema
}
+
+
+export type FormTree> = (
+ S extends Schema.Struct ? StructFormField :
+ S extends ScalarSchema ? ScalarFormField :
+ S["Type"]
+)
+
+
+export interface FormField> {
+ readonly value: SubscriptionRef.SubscriptionRef
+}
+
+export interface ScalarFormField extends FormField {
+ readonly _tag: "ScalarFormField"
+ readonly schema: S
+}
+
+export interface StructFormField> extends FormField {
+ readonly _tag: "StructFormField"
+ readonly schema: S
+ readonly fields: { [K in keyof S["fields"]]: FormTree }
+}
+
+
+export type ScalarSchema = (
+ | Schema.String
+ | Schema.Number
+)
+
+
+const MySchema = Schema.Struct({
+ name: Schema.String,
+ values: Schema.Array(Schema.String),
+})
+
+type TestFormTree = FormTree
+declare const testFormTree: TestFormTree
+
+testFormTree.fields.name.value