+USING: kernel sequences math stack-checker effects accessors
+macros fry combinators.short-circuit ;
+IN: combinators.short-circuit.smart
-USING: kernel sequences math inference accessors macros
- combinators.short-circuit ;
+<PRIVATE
-IN: combinators.short-circuit.smart
+ERROR: cannot-determine-arity ;
+
+: arity ( quots -- n )
+ first infer
+ dup terminated?>> [ cannot-determine-arity ] when
+ effect-height neg 1 + ;
+
+PRIVATE>
-MACRO: && ( quots -- quot )
- dup first infer [ in>> ] [ out>> ] bi - 1+ n&&-rewrite ;
+MACRO: && ( quots -- quot ) dup arity '[ _ _ n&& ] ;
-MACRO: || ( quots -- quot )
- dup first infer [ in>> ] [ out>> ] bi - 1+ n||-rewrite ;
+MACRO: || ( quots -- quot ) dup arity '[ _ _ n|| ] ;