metaclass: (Default)
Оказывается, в 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."

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 26th, 2017 10:32 am
Powered by Dreamwidth Studios