Как отмечали другие, LList
- это не имя типа, а просто имя конструктора различаемого объединения.В F # случаи дискриминируемого объединения оказываются скомпилированными как типы .NET, но это просто деталь реализации, и вы не можете ссылаться на сгенерированные типы.
Если вы хотите объявить LFunction
как приведение,из string
и LList
, тогда вы можете либо расширить определение (как предлагают Брайан и Марсело), либо объявить новый тип (используя type .. and
для объявления рекурсивных типов):
type List = Token list
and Token =
| LInt of int
| LString of string
| LList of List
| LFunction of string * List
PS:Если вы пишете F #, я бы рекомендовал следовать стандартным правилам именования и использовать PascalCase
с более описательным именем для имен типов.Что означает «л»?Не могли бы вы развернуть его (благодаря выводу типа, вам все равно не нужно будет писать имя типа).