Получение FS0035 => Конструкция устарела - PullRequest
3 голосов
/ 23 марта 2012

В проекте на основе fsyacc у меня есть эта строка:

type 'a cucomment = string

Это полное описание ошибки, которое я получаю:

CALast.fs (117,9): ошибка FS0035: эта конструкция устарела: эта Сокращение типа имеет один или несколько объявленных параметров типа, которые не появляются в сокращенном типе. Сокращения типа должны использовать все объявленные параметры типа в сокращенном типе. Рассматривать удаление одного или нескольких параметров типа или использование конкретного типа определение, которое охватывает базовый тип, такой как 'тип C <' a> = C ... '.

Есть идеи, как это решить?

1 Ответ

2 голосов
/ 23 марта 2012

F # больше не допускает псевдонимы типов, которые добавляют параметры универсального типа к типу без объявления нового типа.Если вы хотите определить универсальный тип, который охватывает какой-то другой тип, вы должны использовать какой-то конструктор.Например, вы можете использовать однозначное распознаваемое объединение:

type 'a Cucomment = CC of string

К сожалению, это означает, что вам придется изменить весь код, который использует тип, чтобы развернуть значение, используя сопоставление с образцом или добавив Value член типа.

Единственный случай, когда допустимы псевдонимы универсального типа, - это когда вы объявляете версию типа с единицами измерения, которая требует специального атрибута.Тем не менее, это, вероятно, не будет работать для вас (потому что модули ведут себя по-разному):

[<MeasureAnnotatedAbbreviation>]
type 'a Cucomment = string 

Если это в некотором коде, сгенерированном fsyacc , то это ошибка в fsyaccэто должно быть исправлено (я думаю, это было довольно недавнее изменение).В этом случае сообщите об этом fsbugs в microsoft dot com.

...