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))

Uses (5)

Used by (7)