Szukałem wielu źródeł: to nie wydaje się możliwe, aby zadeklarować definicji typu w F # ala Haskell:F # Deklaracja typu możliwe ala Haskell?
' haskell type def:
myFunc :: int -> int
Chciałbym wykorzystać ten styl typu def w F # - FSI jest szczęśliwy echo z powrotem do mnie:
fsi> let myType x = x +1;;
val myType : int -> int
Chciałbym być wyraźnie o podpisie def typu w F # jak w Haskell. Czy jest jakiś sposób na zrobienie tego? Chciałbym napisać w języku F #:
//invalid F#
myFunc : int -> int
myFunc x = x*2
@Jon: ciekawa pozycja. Dlaczego to "znane bzdury"? Jest to całkowicie opcjonalne w Haskell i osobiście uważam, że jest to bardzo pomocne, ponieważ mogę nakreślić, w jaki sposób chcę, aby moje typy były zgodne. Jestem zainteresowany tym, co widzisz problem z defektami typu. –
@Kevin: Rezygnowanie z pisania adnotacji prawie zawsze odzwierciedla niedociągnięcia w systemie typów, zwykle te zaawansowane funkcje powodowałyby w przeciwnym razie zaciemnianie komunikatów o błędach. Dzieje się tak, gdy przekraczasz słaby punkt, który uderza ML, dodając bardziej zaawansowane formy wnioskowania do systemu typów. Obejście problemu w OCaml polegało na dodaniu adnotacji typu do definicji argumentów przy użyciu polimorficznych wariantów lub obiektów. Obejście problemu w Haskell polegało na tym, aby adnotacje typu były wszechobecne ze względu na wszechobecność klas typów (i brak jakichkolwiek alternatyw). –
@Jon: Dzięki za wyjaśnienia. Myślę jednak, że mówimy o dwóch różnych przyczynach tych adnotacji. Nie chcę adnotacji typu dla kompilatora: chcę tego dla mnie! Innymi słowy, uważam, że pomocne jest wyjaśnienie w jednoznaczny sposób tego, do czego potrzebuję różnych funkcji.Uważam, że po prostu pracując nad sygnaturami typu, mogę uzyskać długie sposoby rozwiązania tego problemu. –