SML中的类型模式匹配

SML中的类型模式匹配,sml,Sml,我正在为SML中的一个编程语言类做一个简单的练习,练习是计算一棵树是否平衡。以下代码是我认为有效的解决方案: datatype IntTree = LEAF of int | NODE of (IntTree * IntTree); fun balanced (LEAF l) = true | balanced (NODE (LEAF l, NODE n)) = false | balanced (NODE (NODE n1, NODE n2)) = balanced(n1) and

我正在为SML中的一个编程语言类做一个简单的练习,练习是计算一棵树是否平衡。以下代码是我认为有效的解决方案:

datatype IntTree = LEAF of int | NODE of (IntTree * IntTree);

fun balanced (LEAF l) = true 
  | balanced (NODE (LEAF l, NODE n)) = false
  | balanced (NODE (NODE n1, NODE n2)) = balanced(n1) andalso balanced(n2)
  | balanced (NODE (NODE n, LEAF l)) = false
  | balanced (NODE (LEAF l1, LEAF l2)) = true;
但是,当我尝试在解释器中运行此命令时,会出现以下错误:

stdIn:98.42-98.54 Error: operator and operand don't agree [tycon mismatch]
  operator domain: IntTree
  operand:         IntTree * IntTree
  in expression:
    balanced n1
stdIn:98.63-98.75 Error: operator and operand don't agree [tycon mismatch]
  operator domain: IntTree
  operand:         IntTree * IntTree
  in expression:
    balanced n2

但是
NODE
应该是
IntTree
类型,为什么不工作呢

我现在没有SML编译器,所以我无法测试它,但尝试将
balanced(n1)
更改为
(balanced(NODE n1))
(与
balanced(n2)相同)
我现在没有SML编译器,所以我无法测试它,但尝试将
balanced(n1)
更改为
(balanced(NODE n1))
(与
balanced(n2)相同)

我现在没有SML编译器,所以我无法测试它,但是尝试将
balanced(n1)
更改为
(balanced(NODE n1))
(与
balanced(n2)相同)
我现在没有SML编译器,所以我无法测试,但尝试将
balanced(n1)
更改为
(平衡(节点n1))
(与平衡(n2)相同)