@Fsharp_chat

Страница 459 из 772
Fill
21.01.2018
10:36:34
типа в качестве результата возвращать error?

Artemy
21.01.2018
10:36:52
Error — это одна из веток Result

type Result<'a, 'b> = | Ok of 'a | Error of 'b

Fill
21.01.2018
10:37:25
ну понятно. Есть метод, который читает из файла, возвращает или строку с данными, или error

Google
Fill
21.01.2018
10:37:34
но не выбрасывает исключений

Artemy
21.01.2018
10:37:47
Как-то так, да

Fill
21.01.2018
10:37:50
да, looks good

спасибо

Mikhail
21.01.2018
10:38:11
Даже в Haskell, насколько я знаю, функции для работы с файлами выбрасывают исключения

Artemy
21.01.2018
10:38:13
Это же как раз и есть "Железнодорожно-ориентированное программирование" ?

Григорий
21.01.2018
10:38:23
https://github.com/gusty/FSharpPlus

Artemy
21.01.2018
10:39:12
ну понятно. Есть метод, который читает из файла, возвращает или строку с данными, или error
Главное не забывать ещё про всякие функции в модуле Result, типа map, mapError, bind и т.п.

был даже где-то на хабре перевод этой статейки
Ну к ней отсылка и была (а именно ,к переводу конкретного термина/выражения)

Всё-таки забавный перевод (хотя непонятно, как это красиво перевести; разве что "рельсо-ориентированное" кто-то предлагал; но, по-моему, оно недалеко от 1-го варианта ушло)

Pavel
21.01.2018
10:41:50
https://fsharpforfunandprofit.com/posts/recipe-part2/

Sergey
21.01.2018
10:42:35
Я правильно понимаю, что использование исключений - не функциональный путь?
на самом деле в ответе много если, и спорных моментов https://eiriktsarpalis.wordpress.com/2017/02/19/youre-better-off-using-exceptions/ и даже если почитать https://pragprog.com/book/swdddf/domain-modeling-made-functional от автора Chessie http://fsprojects.github.io/Chessie/ и Railway-oriented programming то он пишет о том что в своем коде и бизнес логике не стоит кидать ексепшены (т.е. если вы знаете что может что-то пойти не так и вам надо это обрабатывать - то юзать надо Result) но системные ексепшены и и те случае которые вы по бизнес логике не обрабатывает в коде - не нужно ложить и заварачивать в Result - это очень даже ок если такая ситуация крашнет приложение. Ексепшены это норма для .NET и нету нужны лечить их все в каждом приложении

Google
Sergey
21.01.2018
10:44:14
и всем у кого есть возможность почитать https://pragprog.com/book/swdddf/domain-modeling-made-functional - рекомендую, оно как-то ставит все на свои места в этим ROP

Artemy
21.01.2018
10:45:07
Там ещё, вроде, кто-то отмечал, что перехват исключения работает быстрее

Fill
21.01.2018
10:45:42
ну, кейс с исключением ведь не тот, где ты считаешь производительность

Sergey
21.01.2018
10:45:50
ну да. Ещё есть момент, что твой F# код можно использовать в C# приложении
да. про это есть в статье у Ерика. интероп и дизайн паблик АПИ это вообще отдельная тема)

Sergey
21.01.2018
10:46:47
а можно ссылочку?)
да, была в моем длинном сообщении выще https://eiriktsarpalis.wordpress.com/2017/02/19/youre-better-off-using-exceptions/

и еще есть не плохие советы по тому как делать public API https://pblasucci.wordpress.com/2016/12/30/betterapi/

Fill
21.01.2018
10:48:41
всем спасибо за ответы) Будет терь, что почитать на вечер

Artemy
21.01.2018
10:54:10
и еще есть не плохие советы по тому как делать public API https://pblasucci.wordpress.com/2016/12/30/betterapi/
О, значит-таки нормально типы-объединения типа Option и Result тоже в Public API выводить. А то в рекомендациях на fsharp.org написано, что так делать не стоит

Хотя они, когда я как-то смотрел сам, в C#-коде вполне нормально выглядят (по крайней мере Option)

Artemy
21.01.2018
10:55:50
если не ожидать использования из С# то нормально, если ожидать то нет
> there’s no reason not to share these powerful constructs with C# and VB. In particular, using types like Option (rather than “null checking” or using a Nullable) can greatly improve the overall robustness of an API.

Sergey
21.01.2018
10:56:21
на сколько я видел C# API стараются делать без них, иначе код становится в C# cтрашноват для тех кто не знаком с F#

Artemy
21.01.2018
10:56:58
А, ну разве чтобы не пугать незнакомых с самим понятием Option-типа, да

В общем, спасибо за ссылочки на статьи

Sergey
21.01.2018
11:06:32
А, ну разве чтобы не пугать незнакомых с самим понятием Option-типа, да
FSharp.Core.Option для C# превращается в Microsoft.FSharp.Core.FSharpOption что уже не так красиво, + там нету |> и чтобы с ним что-то сделать надо написать что-то длинное, быстро начинаешь придумывать свои extension методы чтобы удобнее пиcать и код становится еще менее интуитивным для C# всетаки роднее Nullable ну и для тех кто скучает по прекрасному есть https://github.com/louthy/language-ext

Google
Artemy
21.01.2018
11:08:57
О, спасибо за ссылочку

Даже Parsec есть

Sergey
21.01.2018
11:11:35
Даже Parsec есть
есть еще вот такая штука https://github.com/sprache/Sprache даже встречал ее в реальных проектах, хотя мне сложнее ее читать чем FParsec

Fill
21.01.2018
16:01:57
Где можно почитать о code style на F#?

Григорий
21.01.2018
16:04:52
Где можно почитать о code style на F#?
http://fsharp.org/specs/component-design-guidelines/

Fill
21.01.2018
16:05:39
спс

Sergey
22.01.2018
05:09:58
Я использовал в реальном проекте, там где F# было не пропихнуть
тогда наверно вариант, я встречал один раз только и мне там дали вохможность переписать на FParsec =)

Evgeniy
22.01.2018
06:33:35
Привет.

Most
22.01.2018
06:43:43
Привет, @gsomix) Я уходил месяца 4 назад, теперь вернулся) А кто-нибудь тут mbrace в работе пробовал? А еще интереснее, mbrace vs spark)

Evgeniy
22.01.2018
07:05:40
https://twitter.com/eiriktsarpalis/status/955135906872209409

Небольшая группа по совместному чтению TaPL и SF. Сейчас в основном обсуждают SF и interactive theorem proving.

https://t.me/joinchat/A8_s30LVQrNmQWBlBlJUKw

Roman
22.01.2018
11:18:01
Господа, такая проблема: Есть проект с либой и проект-консоль, который его дергает. В первом проекте есть несколько файлов, если в одном из них объявляю типы, консоль их не видит. Стоит перенести в следующий файл и объявить их точно так же - все в порядке. Объявляю их в одном неймспейсе с одинаковой видимостью. Есть идеи?

Возможно, это баг в VS Code или Ionide, пушто CLI интерфейс не показывает ошибок

Григорий
22.01.2018
11:19:07
а либа на f#?

Roman
22.01.2018
11:19:49
Да, все на фшарпе. И проблемы только в консольном проекте, внутри либы все в порядке

Григорий
22.01.2018
11:21:11
а типы находятся в модулях или нет?

Roman
22.01.2018
11:21:29
нет, отдельно в обоих случаях

Google
Григорий
22.01.2018
11:22:12
то есть типы находятся в namespace либы?

Roman
22.01.2018
11:22:18
ага

Григорий
22.01.2018
11:24:17
а проект собирается в обоих случаях без ошибок или что-то пишет?

Roman
22.01.2018
11:27:09
Если через CLI, то обоих случаях все ок. Через ионид - ругается, что типы не определены в одном случае

Григорий
22.01.2018
11:29:14
возможно порядок файлов нарушен, вот он и не может найти тип

Roman
22.01.2018
11:33:14
нет, с ним все ок

Походу, это был косяк редактора. Закрытие табы помогло)

При том, что рестарт VS Code не помогал)

Admin


Roman
22.01.2018
11:44:58
При том, что рестарт VS Code не помогал)
Бывало такое при работе с пакетом и ионидом

Roman
22.01.2018
11:54:11
Бывало такое при работе с пакетом и ионидом
Может, и стоило бы зарепортить, но я даже не знаю, как это адекватно описать

Evgeniy
22.01.2018
16:57:05
https://twitter.com/dustinmoris/status/955479681398173697

Григорий
22.01.2018
18:12:41
в F# есть синтаксис для работы с методами и свойствами объекта наподобие `with` из Delphi?)

Григорий
22.01.2018
18:18:28
http://www.delphisources.ru/pages/faq/faq_delphi_basics/With.php.html

Roman
22.01.2018
18:19:28
http://www.delphisources.ru/pages/faq/faq_delphi_basics/With.php.html
С натяжкой можно сказать, что есть для record'ов

Григорий
22.01.2018
18:28:33
прочитал внимательнее то, что сам скинул, это не то. Скажем, чтобы не писать вот такое: type A () = member this.Test() = .. member this.Test2() = .. ... let a = new A() a.Test() a.Test2()Хотелось бы, что-то вроде: with a do Test() Test2()

Klei
22.01.2018
18:33:54
В F# нечасто такой код встречается.

Григорий
22.01.2018
18:34:38
согласен

но если используешь dotNet api, то возникает такая необходимость =)

Google
Klei
22.01.2018
18:37:13
Кстати, удобная фича, если бы тавкое завезли в C# можно было бы не строить fluent-api для изменяемых объектов.

Ivan
22.01.2018
18:45:41
Полезнее был бы Kotlin синтаксис для буилдеров, это бы реализовалось само.

Про FSPickler новость действительно важная. Один из быстрейших бинарных сериализаторов. Можно преписать Orleans на FSharp с идеоматическими возможностями

Klei
22.01.2018
19:06:42
Полезнее был бы Kotlin синтаксис для буилдеров, это бы реализовалось само.
С наскока не понятно, чем kotlin билдеры лучше/хуже братьев из F#, что в пример были поставлены именно они?

Ivan
22.01.2018
19:36:05
У FSharp билдеров сложно делать вложенные. В том то и дело, что похоже, но по другому. В FSharp - билдер - спец класс. Содной стороны это круче, с другой бойлерплейт. И если Kotlin билдеры - это просто синтаксический сахар, наши - это монадные автоматы при компиляции. Так что палка о двух концах. АНо в котексте я говорил о C#

Было бы удобно, если бы описание функции: let f a b g = g a b

Позволяло записать ее вызов как

f 1 2 a + b

Григорий
22.01.2018
19:44:39
типо g вычисляется как a + b?

Ivan
22.01.2018
19:46:09
Или: let until cond body = while cond() |> not do body() Как: let mut s = 1 until s>5 s <- s + 1

Григорий
22.01.2018
19:47:50
попахивает макросами из си =)

Ivan
22.01.2018
19:48:59
Даже отдаленно - нет ? Попахивает сильно Nemerle ?

Григорий
22.01.2018
19:56:33
метапрограммирование с изменением состояния выглядит опасненько - накрутят новых конструкций и потом разгребай это при малейших изменениях

Pavel
22.01.2018
19:57:04
Котлин билдеры это совсем не для f#, да и не для фп в целом

Вот в c# бы пригодилось

Ivan
22.01.2018
19:58:11
Я пример приводил. Неудачный. Суть в м том, что у Котлина есть оч слабая модельмета расширений, абсолютно типобезопасная и простая. В немерле мета крайне могуч, но сложен.

И когда я говорил о Котлиновской модели, имел в виду C#

Pavel
22.01.2018
19:59:41
Да, для c# очень хочется

Roman
22.01.2018
20:00:48
f 1 2 a + b
Не понятно

Ivan
22.01.2018
20:00:52
В F# все сложнее из за отсутсвия скобок. Компилятору не разобрать конца

Страница 459 из 772