Скажем, у меня есть ДусЛучшие значения по умолчанию для данного типа
type Zero = Zero
type Succ<'a> = Succ of 'a
я могу использовать Unchecked.defaultof<Zero Succ Succ>
, когда я передаю значение для встроенной функции, которая использует только тип этого значения. Но как я могу получить правильное значение данного типа? Тот, который не является нулевым.
Поскольку единственное допустимое значение, которое имеет тип Zero Succ Succ
, равно Succ(Succ(Zero))
Я чувствую, что смогу его получить.
Я не забочусь о безопасности промежуточного типа, поэтому я в порядке с типами.
Я попытался это:
let rec makeProperSucc (a : Succ<'a>) = Succ(makeProperNum Unchecked.defaultof<'a>)
and makeProperNum (obj : obj) : obj =
if obj :? Zero then Zero :> obj
else makeProperSucc (obj :?> Succ<obj>) :> obj
let instance<'a>() = makeProperNum Unchecked.defaultof<'a> :?> 'a
Который не работает, потому что defaultof
дает мне пустую и всю информацию типа теряется, потому что я посылаю его к функции ожидающего OBJ.
Ну, я пробовал с встроенным помощником, но не смог его решить. Я не совсем понимаю, что именно делает возможным или невозможным вывести тип. Спасибо за ответ, как обычно. –
Не беспокойтесь, это хорошая забава, см. Обновление. – Gustavo
Отлично! Ну, вот моя попытка, если вы, возможно, захотите увидеть, где я перепутал http://pastebin.com/QqCTcg5Z Почему явная передача оставшегося типа не позволяет его решить? –