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