
Evgeniy
24.04.2017
08:11:58
Ок, принято.
Я с утра тупой. :)

Pavel
24.04.2017
08:12:17
Ну просто Seq.map id - это вообще странно зачем писать.

Friedrich
24.04.2017
08:12:47
Это просто для примера кто-то привёл.

Google

Pavel
24.04.2017
08:13:07
Роман привёл, я поэтому и написал "более реальный" случай использования функции id

Evgeniy
24.04.2017
08:29:59
Seq.fold (flip id) 1 [(+) 2; (*) 4]
Блин, это ужасно.
Надеюсь, так никто не пишет.

Pavel
24.04.2017
08:34:13
А чего ужасного?
Представь, что [ (+) 2; (*) 4] - тебе пришло из клиента, например ты распарсил строчку
Но вообще специально так вряд ли кто-то пишет, само собой.

Evgeniy
24.04.2017
08:35:06
Читать тяжело.

Pavel
24.04.2017
08:35:26
/shrug
Мне понятно, что это значит.

Evgeniy
24.04.2017
08:40:33
Это не значит, что будет понятно остальным.

Pavel
24.04.2017
08:41:01
Остальные могут идти писать на Go, там всё просто и понятно

Evgeniy
24.04.2017
08:41:17
Кек.

Google

Pavel
24.04.2017
08:41:47
Мне вот такая штука понятней, чем цикл, который делает тоже самое

Evgeniy
24.04.2017
08:42:22
Не, сорян.
Это дерьмо. :)
Можно чуть более длинно, но понятнее написать.

Pavel
24.04.2017
08:43:36
Не очень понимаю как.

Evgeniy
24.04.2017
08:45:38
Хотя бы избавиться от (flip id), написать не в point-free.
Будет чуть лучше.

Nikolay
24.04.2017
08:50:22
Короче, похоже в .Net Core 1.1 в очередной раз сломали юнит тесты
И в NUnit никак не починят их
mstest и xunit вроде как работают
Но запуск NUnit можно накостылять через NUnit Lite, вопрос, стоит ли заморачиваться, или переписать лучше под xUnit?

Pavel
24.04.2017
08:56:40
nunit-console не работает что ли?

Nikolay
24.04.2017
09:07:16
Она не кушает новые csproj

Pavel
24.04.2017
09:07:46
А зачем ему .csproj вообще?

Nikolay
24.04.2017
09:07:57
А если пытаться под .dll запустить, не находит какую-то зависимость

Pavel
24.04.2017
09:07:58
Оно не по длл-кам запускается?
https://github.com/nunit/dotnet-test-nunit - это трогал?
Мне просто тоже сейчас предстоит с этим иметь интимную связь.
Update: NUnit now has support for dotnet test, so you no longer have to use NUnitLite. See testing .NET Core RC2 and ASP.NET Core RC2 using NUnit 3.

Google

Nikolay
24.04.2017
09:09:17

Pavel
24.04.2017
09:09:33
Угу, я уже прочитал. Блин, какой же зоопарк.

Nikolay
24.04.2017
09:10:18
Ну если ты будешь под VS запускать, там вроде они починили
Но F# не запустится в VS :D
https://github.com/nunit/nunit3-vs-adapter/issues/297
Вот можешь почитать
Я вижу смысл в использовании xUnit, т.к. его используют мс, и соответственно всё обновляется вовремя

Evgeniy
24.04.2017
09:12:16
@Dolfik Много тестов там?
А то может переписать.

Nikolay
24.04.2017
09:12:25
Там просто есть FsUnit, это типа враппер над NUnit
Ладно, вечером поковыряю)

Evgeniy
24.04.2017
09:15:01
@Dolfik Можно expecto заюзать.

Nikolay
24.04.2017
09:16:39
Стрёмно такие юзать, пока в .Net не утряслось всё окончательно
Опять 100 раз поменяется и сломается
Да сделаю лучше обёртку для пары методов и ок)

Evgeniy
24.04.2017
09:17:36
Да, окей.

Pavel
24.04.2017
09:19:26
Блин, может реально лучше в сторону Mono посмотреть?

Evgeniy
24.04.2017
09:22:10
@Dolfik Но я надеюсь, что ломать перестанут. Только чинить. :)

Nikolay
24.04.2017
09:23:02

Google

Nikolay
24.04.2017
09:23:19
Он вроде LTS
И всё будет работать

Roman
24.04.2017
09:28:59

Evgeniy
24.04.2017
09:34:28
@neftedollar Нет, в стандартной библиотеке нету. Сайм не разрешает. :)
Как и curry/uncurry.

Roman
24.04.2017
09:36:03

Evgeniy
24.04.2017
09:36:42
let curry f a b = f (a,b)
let uncurry f (a,b) = f a b
> F# has no flip/curry/uncurry operators in the prelude - we did consider them of course in F# 1.x but made a definite decision not to include them. OCaml made the same decision at that time. Code that uses these is often of reduced readability. Not always, but in my experience too often.

Vasily
24.04.2017
09:38:45
К сожалению, подобного рода операции правильны с точки зрения фп, но неправильны с точки зрения применения фп в реальной жизни :)

Roman
24.04.2017
09:40:57

Evgeniy
24.04.2017
09:41:21
Если добавил, то это уже звучит как рекомендация. :)
Еще определяют вот такой оператор.
let inline (^<|) f a = f a

Pavel
24.04.2017
09:42:35
просто (^)
[1..100]
|> Seq.filter ^ fun x -> x % 2 = 0

Evgeniy
24.04.2017
09:43:15
Даже так.

Pavel
24.04.2017
09:44:03
Ну это $ хаскельный, но $ переопределить в F# нельзя

Google

Evgeniy
24.04.2017
09:49:15
Ага.
Сайм тоже не одобряет.
@neftedollar В любом случае, даже если все это будет в стандартной библиотеке, никто не мешает определить еще больше кастомных операторов. :)
Не знаю, как к этому относиться. Я человек простой и глупый, мне хочется, чтобы код был простой и понятный, но при этом корректный.

Vasily
24.04.2017
10:01:44
У энтерпрайза к коду требования еще жестче, кстати
Поэтому не надо туда всякую магию тащить, не слишком понятную обычным токарям - фрезеровщикам
Кстати, есть ли внятный code style для f#?

Pavel
24.04.2017
10:03:29
Вроде нет, все как хотят пишут

Vasily
24.04.2017
10:03:40
Ну типа там использовать нормально именованные функции вместо переопределения экзотических обераторов типа fishbone этц

Pavel
24.04.2017
10:03:42
У меня бомбит от индента в два пробела

Vasily
24.04.2017
10:03:54
Индент хрен бы с ним
Это дело десятое

Pavel
24.04.2017
10:04:03
что такое фишбон?
kleisli arrow?

Vasily
24.04.2017
10:04:13
»=»

Pavel
24.04.2017
10:04:17
>=>

Vasily
24.04.2017
10:04:20
Ну типа того

Roman
24.04.2017
10:04:40

Evgeniy
24.04.2017
10:05:01
Vasily http://fsharp.org/specs/component-design-guidelines/
Есть вот такой документ.

Vasily
24.04.2017
10:05:16
О, кстати, точно