metaclass (metaclass) wrote,
metaclass
metaclass

Чернейшее вуду F# и структурных типов

Оказывается, в F# есть что-то вроде структурных типов/констрейнты на наличие членов класса:
https://gist.github.com/3523947
http://codebetter.com/matthewpodwysocki/2009/09/28/generically-constraining-f-part-ii/
http://codebetter.com/matthewpodwysocki/2009/06/11/f-duck-typing-and-structural-typing/

Но: синтаксис объявления и поведение вывода типов в этом случае выглядит крайне противоестественно, особенно в том плане, что касается автогенерируемых компилятором методов.

PS: Мерзость. Если inline функцию объявить в другом модуле и сослаться на приватные члены этого модуля - все это перестает тайп-чекится вообще, а без inline такое сделать невозможно - тайп-чек не проходит вообще.
"The value 'dumpNamed' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible"
или же, без inline:
"This code is not sufficiently generic. The type variable ^T when ^T : (member get_Name : ^T -> string) could not be generalized because it would escape its scope."
Tags: duck typing, f#, structural typing
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments