
Alexey
10.05.2017
17:37:35
В частности операторов

Летучая
10.05.2017
17:38:09

Pig
10.05.2017
17:38:24
const ключевое слово

Artemy
10.05.2017
17:38:47
+

Google

Pig
10.05.2017
17:39:10
И curry/uncurry/flip нету, странное решение.

Artemy
10.05.2017
17:39:46
http://fsprojects.github.io/FSharpx.Extras/reference/fsharpx-functional-prelude.html

Evgeniy
10.05.2017
17:39:52
Сайм говорит, что это часто приводит к нечитаемому коду.
Поэтому этого нет в стандартной библиотеке.

Pig
10.05.2017
17:41:54
Поэтому когда на стыке си и эф оказывается нужен кортеж его приходится собирать руками

Nikolay
10.05.2017
17:43:28
Что там на Build интересного?

Artemy
10.05.2017
17:43:31
@greenest_pig ...или подключать FSharpx.Extras ?

Vasily
10.05.2017
17:46:30
Ну я считаю,что для промышленных языков важна все же не полнота комбинаторов

Pig
10.05.2017
17:46:31
Хорошо хоть отдельно батарейки продают :D

Evgeniy
10.05.2017
17:49:30
Здесь, кстати, повторяется ситуация с OCaml.
У него тоже довольно небольшая стандартная библиотека.

Pig
10.05.2017
17:50:12
И пачка альтернативных.

Evgeniy
10.05.2017
17:50:27
Все ништяки в батарейках, типа Core и Batteries.

Google

Nikolay
10.05.2017
18:09:55
А можно как-то установить Visual F# Tools которая альфа с поддержкой .Net Core?

Kirill
10.05.2017
18:15:13

Igor
10.05.2017
18:17:41
Пробую сейчас, отпишусь потом
Что-то не радует:
- биндинг для ReactNative пилить только начали https://github.com/BuckleTypes/bs-react-native и они неполные
- синтаксис биндингов не лучше чем у Fable
- с IDE тоже непонятно ?

Evgeniy
10.05.2017
18:25:03
@neftedollar Можно попытать счастье и в WSL установить vscode.
С плагином для OCaml/Reason.
Ну, все еще не будет возможности делать бинарники для винды. Но что-то осознанное писать можно будет.

Nikolay
10.05.2017
19:48:17
if data.Message.ForwardFrom.IsNone
printf "None"
elif data.Message.ForwardFrom.Value.Username <> "Dolfik"
printf "Not dolfik"
else
// other code
Как такой код оформить красиво? :)

Pig
10.05.2017
19:51:00
match data.Message.ForwardFrom with
| None -> printf "None"
| Some v when v.Username <> "Dolfik" -> printf "Not dolfik"
| _ -> // other code

Летучая
10.05.2017
20:14:18
щас бы в Ф# юзать elif
прям антипаттерн
даже в с# не юзаю

Nikolay
10.05.2017
20:21:02
100 и 101 :)
Привет

Roman
10.05.2017
20:36:34
Привет сотый.
И сто первому привет)

Nikolay
10.05.2017
20:41:28
module UpdateType =
/// Indicates that the received update is a Message
let (|Message|_|) (update: Update) = update.Message
match update with
| UpdateType.Message msg -> processMessage bot msg
| _ -> ()
Это норм? Или можно проще?)

Летучая
10.05.2017
20:43:50
Красиво и понятно
Имхо

Nikolay
10.05.2017
20:44:33
Если что,
update.Message
это option

Pig
10.05.2017
20:48:08
Option.iter (processMessage bot) update
(* или *)
update
|> Option.iter (proccessMessage bot)

Google

Pig
10.05.2017
20:48:45
Можно так, если вторая ветка будет просто возвращать ()

Летучая
10.05.2017
20:53:49
Авторы вроде как рекомендуют писать без идентов в матчах и пайпах:
match smth with
| 0 -> ()
| 1 -> ()
вместо
match smth with
| 0 -> ()
Погоды не делает конечно, но мы за единый кодстайл!

Nikolay
10.05.2017
20:56:09
Позже отрефакторю)

Roman
10.05.2017
21:14:12


Evgeniy
11.05.2017
07:50:44
Прочитал хорошее.
In object-oriented theory, applications tend to be extended "downward from the bottom". [...] The users of your code are expected to modify and add classes with specific interfaces on a lower level, and then your upper-level main classes automatically glue everything together through dynamic dispatch. In functional programming, we often extend applications "at the top". Your application is written as a library that consists of a set of "lower-level" modules, and then the user creates the main functions that glue your lower-level functions together. [...] With the functional approach, think of the user more as a curator of components, and less as an implementer of contracts.
https://two-wrongs.com/dynamic-dispatch-in-haskell-how-to-make-code-extendable
И кое-что от Дона Сайма.
Crucially, the focus in F# OO is not at all on “hierarchies of types” – the F# programmer almost never thinks about “the class hierarchy” (which is mentioned often in that linked paper). That’s a very, very good thing and central to the productivity benefits of F#. Java/C# programmers who don't understand this tend to produce bad F# code and/or generally don't grok why F# is asking them to forget/unlearn/disavow/repent what they have spent so long learning. Hierarchy-oriented thinking is “horrible OO” and is the kind of thinking we really want people to avoid in F#.
https://github.com/dotnet/csharplang/issues/288#issuecomment-288114545
Глупый университет (на самом деле я). Никак не доберусь до перевода Why OO matters.


Vasily
11.05.2017
08:19:53
Хороший коммент Сайма

Roman
11.05.2017
08:28:26

Vasily
11.05.2017
08:29:45
Нельзя научить, можно научиться
Я тут подумал, что с моей вчерашней проблемой может помочь Decision tree

Ed
11.05.2017
09:14:07
Скажите пожалуйста, а почему у меня на Маке нельзя сколмпилировать проект использующий FSharp.TypeProviders WsdlService?

Dmitry
11.05.2017
09:14:31
Смотрели MS Build? Там видео было про Jet.com (в контексте Cosmos DB), так там на паре кадров засветился код на F#

Vasily
11.05.2017
09:14:31
Потому что type providers не поддерживаются в net core?
jet сильно форсит f#

Evgeniy
11.05.2017
09:14:52
@edvail .Net Core или Mono?

Ed
11.05.2017
09:15:00
mono

Google

Ed
11.05.2017
09:15:07
The type provider 'FSharp.Data.TypeProviders.DesignTime.DataProviders' reported an error: The .NET SDK 4.0 or 4.5 tools could not be found

Evgeniy
11.05.2017
09:17:09
https://github.com/fsprojects/FSharp.Data.TypeProviders/issues/1
Может в WsdlService как раз зависимости от .Net Fx торчат?

Ed
11.05.2017
09:18:58
похоже на то
жаль

Admin
ERROR: S client not available

Ed
11.05.2017
09:19:28
спасибо

Evgeniy
11.05.2017
09:19:55
Блин, грустно.
Кто-то должен их переписать. :(

Vasily
11.05.2017
09:26:58
Есть ли примеры decision tree для множеств?

Roman
11.05.2017
09:37:05

Vasily
11.05.2017
09:38:22
Угу

Roman
11.05.2017
10:11:38
Поясни

Vasily
11.05.2017
10:12:16
Есть объект из трех полей - верхняя граница, нижняя граница, имя

Roman
11.05.2017
10:12:18
Я не очень понимаю как можно строить деревья решений для множеств, а главное в каких случаях это нужно

Vasily
11.05.2017
10:12:49
Мне нужно из множества таких объектов найти аномальные
Аномальными считаются следующие
1. У которых дублируются границы
2.У которых дублируется верхняя или нижняя граница
3. Пустое имя

Google

Vasily
11.05.2017
10:14:13
Ну и соответственно анализ по цепочке вних

Roman
11.05.2017
10:14:14
А обычные фильтры не подходят?

Arseniy
11.05.2017
10:14:15
ну и почему не написать 4 предиката и сделать конкат?

Dmitry
11.05.2017
10:14:16
"границы" - это что-то совпадает с соседними объектами?

Vasily
11.05.2017
10:14:17
*вниз

Roman
11.05.2017
10:14:24

Vasily
11.05.2017
10:15:31
Шаг первый - определить полные дубликаты
Т.е. те, у которых верхняя и нижняя граница совпадают
Шаг два - из тех, кто остался, вычленить неполные дубликаты(совпадающие по верхней или нижней границе)
Шаг три - из тех, кто остался, вычистить пустые записи
пока выглядит как рекурсивный партишнинг

Dmitry
11.05.2017
10:17:29
а на моменте создания этого множества нет возможности это делать, так как было бы легче

Vasily
11.05.2017
10:17:33
Нет
Это сторонний файл
Который надо проанализировать

Dmitry
11.05.2017
10:17:59
ну вот читая его и проводить анализ

Vasily
11.05.2017
10:18:09
Ну вот я его и читаю