
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
Всё-таки забавный перевод (хотя непонятно, как это красиво перевести; разве что "рельсо-ориентированное" кто-то предлагал; но, по-моему, оно недалеко от 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

Fill
21.01.2018
10:44:30
и там короче обратно
из result в exception

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

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

Sergey
21.01.2018
10:45:50

Григорий
21.01.2018
10:46:19

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
Хотя они, когда я как-то смотрел сам, в C#-коде вполне нормально выглядят (по крайней мере Option)

Sergey
21.01.2018
10:55:05

Artemy
21.01.2018
10:55:50

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

Fill
21.01.2018
16:05:39
спс

Bonart
21.01.2018
22:15:02

Sergey
22.01.2018
05:09:58

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 не помогал)

Roman
22.01.2018
11:44:58

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?)

Roman
22.01.2018
18:16:57

Григорий
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

Григорий
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, то возникает такая необходимость =)

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

Google

Ivan
22.01.2018
18:45:41
Полезнее был бы Kotlin синтаксис для буилдеров, это бы реализовалось само.
Про FSPickler новость действительно важная. Один из быстрейших бинарных сериализаторов. Можно преписать Orleans на FSharp с идеоматическими возможностями

Klei
22.01.2018
19:06:42

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

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