Определение, которое вы разместили в комментарии, является правильным. Ваша версия из комментариев была:
type ExprTree =
| Const of int
| Ident of string
| Sum of ExprTree * ExprTree
| Let of string * ExprTree * ExprTree
| App of string * ((ExprTree) list)
Определение конструктора App
содержит некоторые ненужные скобки - вам не нужны никакие и вы можете написать только string * ExprTree list
, но они не повредят ни одному из них. Я подозреваю, что проблема была не в определении, а в том, как вы используете конструктор. Вот правильный синтаксис:
App("foo", [Const 1; Ident "x"])