@Fsharp_chat

Страница 307 из 772
Igor
10.09.2017
13:21:40
Важно порядок сохранить. Это элементы списка, который видит юзер, будет странно если будет пересортироваваться при каждом обновление.

У List есть метод, который может два списка превратить в декартово произведение. Думаю, можно ли что-то с ним потом сделать умное?

kana
10.09.2017
13:26:34
zip?

Igor
10.09.2017
13:31:09
List.allPairs (для zip нужно что бы у списков были одинаковые размеры). Ладно, сделал по тупому firstList |> List.filter (fun x -> List.forall (fun x2 -> x2.id <> x.id) secondList)

Google
kana
10.09.2017
13:39:06
diffBy :: Eq b => (a -> b) -> [a] -> [a] -> [a] diffBy f a b = filter (\x -> all (\y -> f x /= f y) b) a main = print $ diffBy id [1..3] [3..4] -- [1, 2]

ну да, то же самое)



вот так еще можно



или если чуть отрефакторить

вы тут простите, что на хаскеле, я апи шарпа не знаю и репла установленного не имею, но мне кажется, фшарписты поймут хаскелевый код без проблем, благо он почти один к одному. Тем более если у тебя на аватарке лого хаскеля)

еще больше point-free для бога point-free diffBy :: Eq b => (a -> b) -> [a] -> [a] -> [a] diffBy f = foldr delete where delete y = filter ((/= f y) . f)

Friedrich
10.09.2017
14:19:26
Принцип другой. Скоп имеет парента. Смотрит в себе потом в паренте. Когда идет замыкание - происходит инкапсуляция парент скопа. Обычно не совсем корректная. В csharp например некорректная. Он замыкает скоп целиком. А мог бы определить потребности вложенного и замкнуть частично.
Ради интереса проверил на таком C#-коде: int x = 0, y = 0; Action a = () => x++; Action b = () => y++; C# в этом случае действительно создаёт один display class на оба замыкания, а вот F# — по одному классу на каждое. Очень интересная особенность поведения, спасибо за информацию!

Ivan
10.09.2017
14:47:58
Andrew
10.09.2017
14:49:23
Именно
А что в этом плохого-то? И работает проще, и инстансов плодится меньше

Ivan
10.09.2017
14:53:57
С точки зрения чистого кода - ничего. Но сборщик мусора соберет только то что не захвачено. А прдствь себе ситуацию с огрмной каритинкой, котороая потом не нужна, и долго живущим каллбеком.

Andrew
10.09.2017
14:56:55
Да, понял

Google
Friedrich
10.09.2017
14:58:40
А что в этом плохого-то? И работает проще, и инстансов плодится меньше
Решарпер на такие кейсы даже показывает специальную подсказку.

Мол, возможна утечка памяти.

Ivan
10.09.2017
14:59:38
Ага, а вот разрулить можно только с большим оверхиадом по коду

Ivan
10.09.2017
15:56:53
Не лучший вариант

Andrew
10.09.2017
16:21:45
Ну вообще условия для появления утечки довольно специфические. Если один метод сначала создает большой объект, замыкает его, а потом еще вешает отдельный долгий хэндлер с другим замыканием - это первая кандидатура на рефакторинг

Ivan
10.09.2017
16:42:31
Элементарно устроить при подписке на эвент

Абсолютно та же история на асинках - await не предпологает освобождение неиспользуемых ниже локальных переменных.

Klei
10.09.2017
19:10:17
Ребят, приветствую. Подскажите, пожалуйста, можно ли при наследовании интерфейса реализовать его частично, а некоторые методы так и оставить абстрактными для следующих наследников?
Вот так канает: type ISomeInterface = abstract member DoOne : float -> float -> float abstract member DoTwo : float -> float -> float [<AbstractClass>] type Parent () = abstract member DoTwo : float -> float -> float interface ISomeInterface with member this.DoOne x y = x + y member this.DoTwo x y = this.DoTwo x y type Child () = inherit Parent() override this.DoTwo x y = x - y type OtherChild () = inherit Parent() override this.DoTwo x y = x [ Child() :> ISomeInterface OtherChild() :> ISomeInterface ] |> List.map (fun p -> p.DoTwo 4.0 2.0)

Evgeniy
11.09.2017
11:59:58
Привет! o/

Pavel
11.09.2017
12:00:09
Привет! o/
привет

Evgeniy
11.09.2017
15:56:21
@angmarr Сайм говорит, что нужно использовать аннотации типов.

Igor
11.09.2017
15:57:29
@angmarr Сайм говорит, что нужно использовать аннотации типов.
> аннотации типов. Напомни как они связаны с монадами?

Evgeniy
11.09.2017
15:58:07
> аннотации типов. Напомни как они связаны с монадами?
https://github.com/fsharp/fslang-suggestions/issues/594#issuecomment-328573917

Igor
11.09.2017
15:59:11
https://github.com/fsharp/fslang-suggestions/issues/594#issuecomment-328573917
Думал ты ответил на мой пост в @dotnettalks . Я и не заметил что это F# чат. А с Доном - ну хорошо отмазался, будем типы ставить.

Oleg
11.09.2017
18:18:14
Vasily Нашел решение про интексацию пар?

Evgeniy
11.09.2017
19:57:05
https://twitter.com/Jimmy_Byrd/status/907319634675879938

Fable.Template.Library обновили.

Google
Vasily
11.09.2017
20:48:09
Но у меня специфический кейс, который позволил сделать за один подход

Проход

А еще до меня наконец-то дошло практическое применение chunkBySize

Evgeniy
12.09.2017
06:12:28
@fvnever https://github.com/matthid/s2client-dotnet/blob/master/Readme.md

Evgeniy
12.09.2017
14:26:03
Посмотрите, о чем твитнул(а) @bentnib: https://twitter.com/bentnib/status/907575086332465152?s=09

Может быть вам будет интересно, это книга про Standard ML.

Oleg
12.09.2017
15:12:54
Да, нашел в итоге
O(ln n)? Индекс придумал?

Vasily
12.09.2017
15:13:57
O(ln n)? Индекс придумал?
Ну у меня изначально отсортированные данные по нижнему пределу

Так что там O(n) получилось

Навскидку

Плюс не бывает одновременно двух пересечений

Oleg
12.09.2017
15:15:01
@gsomix привет, ты не копал в сторону FSI для netcore? Хочу более интерактивную разработку с Giraffe - либо hotload, либо REPL

Ну у меня изначально отсортированные данные по нижнему пределу
Так O(n) это же простым перебором или тебе все пересечения найти надо?

Vasily
12.09.2017
15:17:21
Там все пересечения ищутся простым перебором

В силу условий задачи

Условно, пересекаться могут только два соседних

Oleg
12.09.2017
15:19:04
Привет. Нет, не копал пока.
Я вчера весь вечер провозился безрезультатно, даже для full framework не получилось - объекты не создаются, не все резолвится

Google
Oleg
12.09.2017
15:21:02
Условно, пересекаться могут только два соседних
Это мне напомнило задачу по поиску регионов пересекающих видимую область таблицы. В общем, там R-tree подходит

Oleg
12.09.2017
15:31:02
Проблема в том, что R- дерево еще надо построить
да, в случае таблицы индекс строится один раз. Да и в пространственных задачах, как правило, тоже

Vasily
12.09.2017
15:33:59
Ну для моего случая дерево будет очень разреженным

Я какую-то подобную структуру думал построить

Но там скорее массив деревьев тогда

Evgeniy
12.09.2017
15:48:51
Раз заговорили про деревья. А какие есть хорошие библиотеки с коллекциями для F#? В каком они состоянии? Может их причесать надо, под нетстандарт собрать?

Oleg
12.09.2017
16:22:38
Писал три недели доки (https://github.com/OlegZee/Xake/wiki) и только сейчас, спустя два месяца, обнаружил, что не добавил ссылку на страницу проекта. Без документации грустно все это выглядит

Oleg
12.09.2017
17:03:06
трансляция началась

Evgeniy
12.09.2017
17:11:22
Кирилл
12.09.2017
17:35:44
Apple?

Evgeniy
12.09.2017
17:46:53
Ах. :)

6996
12.09.2017
20:11:45


Andrew
12.09.2017
20:12:18
@gsomix Алярма

Xak
12.09.2017
20:17:32
бан, наверное

Летучая
12.09.2017
20:17:46
Интересный канал, надо рассмотреть.

Pauline
12.09.2017
20:23:15
нажала и аж телеграм вылетел

Igor
12.09.2017
21:40:18
Есть тут у нас Киевляне? https://twitter.com/AntyaDev/status/907604544208687104

Google
Evgeniy
13.09.2017
06:32:41
Никак не соберусь завести свой небольшой канал, поэтому положу сюда. Доклад Brian Goetz, архитектора языка Java, про важность понимания различных парадигм и про их правильное использование. Перекликается с принципом "FP in small, OO in big", который продвигается в F# сообществе. Название, ну, такое. :) https://www.youtube.com/watch?v=ROL58LJGNfA

Paket победил.

https://github.com/NuGet/NuGetGallery/pull/4638

> Definitely :) https://github.com/fsharp/fslang-suggestions/issues/594#issuecomment-329092773

А я что-то не смог придумать, как можно здесь сообщение об ошибке улучшить. :( @fvnever @angmarr

Проверять, что у Record1 и Record2 есть общие поля (id), и сообщать пользователю о том, что нужно правильную аннотацию типа указать?

Снежный
13.09.2017
10:08:00
Всем привет. Подскажите, пожалуйста, как в конструкторе класса в метод дргугого класса передать this, в C# - все ок, а в F# он не понимает this



Снежный
13.09.2017
10:09:04
эээ, не понял

Летучая
13.09.2017
10:09:35
type CheckerService () as this =

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