def has_kind
bend-schema-lib@0.4.1.0 · core.bend:554
import bend-schema-lib@0.4.1.0/core.bend as Core
import Base
554def has_kind(s: Schema, +k: JKind) -> Bool:
555 match s:
556 case SNat{}:
557 kind_eq(KNum{}, k)
558 case SNatIn{lo, hi}:
559 kind_eq(KNum{}, k)
560 case SInt{}:
561 kind_eq(KNum{}, k)
562 case SIntIn{lo, hi}:
563 kind_eq(KNum{}, k)
564 case SStr{}:
565 kind_eq(KStr{}, k)
566 case SEnum{names}:
567 kind_eq(KStr{}, k)
568 case SBool{}:
569 kind_eq(KBool{}, k)
570 case STrue{}:
571 kind_eq(KBool{}, k)
572 case SList{e}:
573 kind_eq(KList{}, k)
574 case STuple{ts, rest}:
575 kind_eq(KList{}, k)
576 case STEnd{}:
577 kind_eq(KList{}, k)
578 case SField{n, fs, rest}:
579 kind_eq(KObj{}, k)
580 case SEnd{}:
581 kind_eq(KObj{}, k)
582 case STagged{key, n, cs, rest}:
583 kind_eq(KObj{}, k)
584 case STagEnd{key}:
585 kind_eq(KObj{}, k)
586 case SVariant{n, vs, rest}:
587 kind_eq(KObj{}, k)
588 case SVEnd{}:
589 kind_eq(KObj{}, k)
590 case SJson{}:
591 kind_eq(KJson{}, k)
592 case SOpt{i}:
593 Bool.or(kind_eq(KNull{}, k), has_kind(i, k))
594 case SOptional{i}:
595 Bool.or(kind_eq(KAbsent{}, k), has_kind(i, k))
596 case SStrLen{lo, hi, s2}:
597 has_kind(s2, k)
598 case SListLen{lo, hi, s2}:
599 has_kind(s2, k)
600 case SRule{s2, tag}:
601 has_kind(s2, k)
602 case SStrict{s2}:
603 has_kind(s2, k)
604 case SEither{l, r}:
605 Bool.or(has_kind(l, k), has_kind(r, k))