Function: majutsu-template--type-structurally-compatible-p

majutsu-template--type-structurally-compatible-p is a natively compiled function defined in majutsu-template.el.

Signature

(majutsu-template--type-structurally-compatible-p ACTUAL EXPECTED)

Documentation

Return non-nil if ACTUAL and EXPECTED are structurally compatible.

Source Code

;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-template.el
(defun majutsu-template--type-structurally-compatible-p (actual expected)
  "Return non-nil if ACTUAL and EXPECTED are structurally compatible."
  (setq actual (majutsu-template--type-ref-normalize actual)
        expected (majutsu-template--type-ref-normalize expected))
  (let ((actual-base (majutsu-template--type-ref-base-type actual))
        (expected-base (majutsu-template--type-ref-base-type expected)))
    (cond
     ((equal actual expected) t)
     ((and (consp actual) (consp expected) (eq (car actual) :list) (eq (car expected) :list))
      (majutsu-template--type-convertible-p (cadr actual) (cadr expected)))
     ((and (consp actual) (consp expected) (eq (car actual) :option) (eq (car expected) :option))
      (majutsu-template--type-convertible-p (cadr actual) (cadr expected)))
     ((and (consp actual) (consp expected) (eq (car actual) :lambda) (eq (car expected) :lambda)
           (= (length (cadr actual)) (length (cadr expected))))
      (and (cl-every #'identity
                     (cl-mapcar #'majutsu-template--type-convertible-p
                                (cadr actual) (cadr expected)))
           (majutsu-template--type-convertible-p (caddr actual) (caddr expected))))
     ((eq actual-base expected-base) t)
     (t nil))))