@@ -23,11 +23,12 @@ export const byTag = {
2323 literal : 550 ,
2424 array : 1000 ,
2525 optional : 2500 ,
26- intersection : 6000 ,
26+ allOf : 6000 ,
2727 record : 7000 ,
2828 object : 7500 ,
2929 tuple : 8000 ,
30- union : 8500 ,
30+ anyOf : 8500 ,
31+ oneOf : 9000 ,
3132} as const satisfies Record < AnyTypeName , number >
3233
3334export function invert < T extends Record < keyof any , keyof any > > ( x : T ) : { [ K in keyof T as T [ K ] ] : K }
@@ -62,9 +63,9 @@ export declare namespace Seed {
6263 | Seed . Record < T >
6364 | Seed . Object < T >
6465 | Seed . Tuple < T >
65- | Seed . Union < T >
66- // | Seed.Optional <T>
67- | Seed . Intersection < T >
66+ | Seed . AnyOf < T >
67+ | Seed . OneOf < T >
68+ | Seed . AllOf < T >
6869
6970 interface Free extends T . HKT { [ - 1 ] : Seed . F < this[ 0 ] > }
7071 ////////////////
@@ -115,9 +116,9 @@ export declare namespace Seed {
115116 record : Seed . Record < T >
116117 object : Seed . Object < T >
117118 tuple : Seed . Tuple < T >
118- union : Seed . Union < T >
119- // optional : Seed.Optional <T>
120- intersection : Seed . Intersection < T >
119+ anyOf : Seed . AnyOf < T >
120+ oneOf : Seed . OneOf < T >
121+ allOf : Seed . AllOf < T >
121122 }
122123 type Composite =
123124 | Seed . Array
@@ -139,12 +140,13 @@ export declare namespace Seed {
139140 ////////////////
140141 /// applicative
141142 interface Object < T = unknown > extends newtype < [ seed : byTag [ 'object' ] , def : [ K : string , V : T ] [ ] ] > { }
142- interface Union < T = unknown > extends newtype < [ seed : byTag [ 'union' ] , def : T [ ] ] > { }
143+ interface AnyOf < T = unknown > extends newtype < [ seed : byTag [ 'anyOf' ] , def : T [ ] ] > { }
144+ interface OneOf < T = unknown > extends newtype < [ seed : byTag [ 'oneOf' ] , def : T [ ] ] > { }
143145 interface Tuple < T = unknown > extends newtype < [ seed : byTag [ 'tuple' ] , def : T [ ] ] > { }
144146 ////////////////
145147 /// binary
146148 interface Record < T = unknown > extends newtype < [ seed : byTag [ 'record' ] , def : T ] > { }
147- interface Intersection < T = unknown > extends newtype < [ seed : byTag [ 'intersection ' ] , def : [ A : T , B : T ] ] > { }
149+ interface AllOf < T = unknown > extends newtype < [ seed : byTag [ 'allOf ' ] , def : [ A : T , B : T ] ] > { }
148150}
149151
150152export const Functor : T . Functor . Ix < boolean , Seed . Free , Seed . F < unknown > > = {
@@ -166,11 +168,12 @@ export const Functor: T.Functor.Ix<boolean, Seed.Free, Seed.F<unknown>> = {
166168 case x [ 0 ] === byTag . literal : return x
167169 case x [ 0 ] === byTag . array : return [ x [ 0 ] , f ( x [ 1 ] ) , x [ 2 ] ]
168170 // case x[0] === byTag.optional: return [x[0], f(x[1])]
169- case x [ 0 ] === byTag . intersection : return [ x [ 0 ] , [ f ( x [ 1 ] [ 0 ] ) , f ( x [ 1 ] [ 1 ] ) ] ]
171+ case x [ 0 ] === byTag . allOf : return [ x [ 0 ] , [ f ( x [ 1 ] [ 0 ] ) , f ( x [ 1 ] [ 1 ] ) ] ]
170172 case x [ 0 ] === byTag . record : return [ x [ 0 ] , f ( x [ 1 ] ) ]
171173 case x [ 0 ] === byTag . object : return [ x [ 0 ] , x [ 1 ] . map ( ( [ k , v ] ) => [ k , f ( v ) ] satisfies [ any , any ] ) ]
172174 case x [ 0 ] === byTag . tuple : return [ x [ 0 ] , x [ 1 ] . map ( f ) ]
173- case x [ 0 ] === byTag . union : return [ x [ 0 ] , x [ 1 ] . map ( f ) ]
175+ case x [ 0 ] === byTag . anyOf : return [ x [ 0 ] , x [ 1 ] . map ( f ) ]
176+ case x [ 0 ] === byTag . oneOf : return [ x [ 0 ] , x [ 1 ] . map ( f ) ]
174177 }
175178 }
176179 } ,
@@ -192,9 +195,10 @@ export const Functor: T.Functor.Ix<boolean, Seed.Free, Seed.F<unknown>> = {
192195 case x [ 0 ] === byTag . literal : return x
193196 case x [ 0 ] === byTag . array : return [ x [ 0 ] , f ( x [ 1 ] , false , x ) , x [ 2 ] ]
194197 // case x[0] === byTag.optional: return [x[0], f(x[1], isProperty, x)]
195- case x [ 0 ] === byTag . intersection : return [ x [ 0 ] , [ f ( x [ 1 ] [ 0 ] , false , x ) , f ( x [ 1 ] [ 1 ] , false , x ) ] ]
198+ case x [ 0 ] === byTag . allOf : return [ x [ 0 ] , [ f ( x [ 1 ] [ 0 ] , false , x ) , f ( x [ 1 ] [ 1 ] , false , x ) ] ]
196199 case x [ 0 ] === byTag . record : return [ x [ 0 ] , f ( x [ 1 ] , false , x ) ]
197- case x [ 0 ] === byTag . union : return [ x [ 0 ] , x [ 1 ] . map ( ( _ ) => f ( _ , false , x ) ) ]
200+ case x [ 0 ] === byTag . anyOf : return [ x [ 0 ] , x [ 1 ] . map ( ( _ ) => f ( _ , false , x ) ) ]
201+ case x [ 0 ] === byTag . oneOf : return [ x [ 0 ] , x [ 1 ] . map ( ( _ ) => f ( _ , false , x ) ) ]
198202 case x [ 0 ] === byTag . tuple : return [ x [ 0 ] , x [ 1 ] . map ( ( _ ) => f ( _ , true , x ) ) ]
199203 case x [ 0 ] === byTag . object : return [ x [ 0 ] , x [ 1 ] . map ( ( [ k , v ] ) => [ k , f ( v , true , x ) ] satisfies [ any , any ] ) ]
200204 }
0 commit comments