Тип переменной, которая будет объединена, встречается в типе

У меня есть функция, чтобы восстановить дерево из 2 списков. Я возвращаю список по всем веткам, но получаю ошибку, которую не понимаю. Но я предполагаю, что это связано с типами возвращаемых данных.

Ошибка заключается в следующем:

Can't unify ''a with ''a list (Type variable to be unified occurs in type) Found near recon
( ::( preoH, preoT), ::( inoH, ...))
Exception- Fail "Static errors (pass2)" raised

Строка, в которой возникает ошибка, является заголовком определения функцииfun recon (preoH::preoT, inoH::inoT) =

Что конкретно означает эта ошибка и почему она возникает?

(* Reconstruts a binary tree from an inorder and a preorder list. *)
fun recon (preoH::preoT, inoH::inoT) =
  (* Case 0: Leaf reached*)
  if
      preoT = [] andalso inoT = [] andalso preoH = inoH
  then
      [preoH]
  else
      let
      (* split the list of nodes into nodes to the left and nodes to the
      right of preoH; ST stands for subtree *)
      val (inoLST, inoRST) = splitat (inoH::inoT, preoH)
      val (preoLST, preoRST) = splitafter (preoT, last(inoLST))
      in
      (* Case 1: Unary branch encountered, make preoH the parent node of the
      subtree and combine the left and right preorder and inorder lists*)
      if
              length(inoLST) <> length(preoLST)
      then
          [preoH, recon (preoLST@preoRST, inoLST@inoRST)]
      (* Case 2: Binary branch encountered, proceed as normal *)
      else
              [recon (preoLST, inoLST), preoH, recon (preoRST, inoRST)]
      end;

Ответы на вопрос(2)

Ваш ответ на вопрос