单态限制再次发生!因为myTree没有任何参数,编译器避免使其变为多态.但是数字文字是多态的(没有Int文字,只有整数Num文字!),所以编译器需要决定某种Num类型.好吧,Int如果你处理大量数据可能会有问题,所以它选择了Integer.
myTree
Int
Num
Integer
给予myTree明确的签名会阻止这种情况; 要么使用
myTree :: Num a => Tree a
要么
myTree :: Tree Int