Является ли система ограничения типов в fsharp lang? - PullRequest
0 голосов
/ 24 февраля 2020

в f # для операции "+" сигнатура функции

5+6 //int->int->int

, но когда я пишу код, подобный следующему, он работает

6.0 + 3.0 //float->float->float

в OCaml "+" отличается от «+».

5 + 5 //int->int->int
5.0 +. 5.0 // float->float->float

это более совершенный и ограниченный, чем f #, почему f # делает эту неидеальную сигнатуру типа? и почему f # не поддерживает "+."?

, так что запутался в функции f #: (

1 Ответ

5 голосов
/ 24 февраля 2020

В отличие от OCAML, F # позволяет генерировать c arithmeti c за счет использования функции, называемой статически разрешенными параметрами типа, которая аналогична Haskell классам типов.

Оператор + может использоваться для любого типа, который определяет операцию +, и он специализирован для различных примитивов. NET, как вы можете видеть в коде для + здесь . Это означает, что вы можете разработать арифметику c для пользовательских типов и заставить ее «просто работать» без ваших собственных пользовательских операторов.

Вы можете прочитать об истории, которая привела к этому изменению, в The Early История F # , вторая под названием «F # 1.0 - Улучшение функционального ядра: перегруженная арифметика c».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...