Может ли F# быть преобразован в стиль без очков?

При изучении темы, связанной с программированием, я наткнулся на инструмент для рефакторинга без баллов для Haskell в lambdabot, и мне было интересно, можно ли реорганизовать F# в стиль без баллов?

Я не защищаю использование стиля pointfree, но рассматриваю его как средство для лучшего понимания функции.

Примечание: pad ответил на более раннюю версию этого вопроса, но я перефразировал этот вопрос, так как ответ имеет значение для других, изучающих и использующих F#, и я не хотел, чтобы это было удалено из-за некоторых близких голосов.

Примечание: просто потому, что я изменил вопрос, не принимайте ответ, чтобы означать, что нельзя писать код в стиле без точек, используя F#. Это может быть сделано во многих случаях, но есть ограничения, которым вы должны следовать.

1 ответ

Решение

Короткий ответ

Нет.

Длинный ответ

В F# есть несколько вещей, которые делают такой инструмент непрактичным. (1) Из-за взаимодействия.NET код F# часто имеет побочные эффекты, и автоматическое преобразование кода становится действительно трудным, когда в игру вступают побочные эффекты. Это не тот случай с Хаскеллом; Эквациональное рассуждение намного проще в Haskell, и вы можете переписать левые части по правым сторонам, не изменяя их оценки. (2) Бессмысленное программирование в F# ограничено ограничением значения. Я не уверен, что вы можете агрессивно выполнять преобразование кода, не решая эту проблему.

Я думаю, что более практично предполагать, что код F# является чистым, и в определенных случаях ограничение значений не возникает, чтобы мы могли дать пользователям некоторые подсказки. Пользователи могут применять предложения дискретно после оценки того, что предложения действительно верны. Это ближе к подходу HLint, чем тот, на который вы ссылались. FSharpLint добавил некоторые правила linting в этом направлении.

Другие вопросы по тегам