
Igor
04.07.2017
11:08:28
Можно пример?
Вот такой код работает, но мне даже VSCode подсвечивает warning, что можно проще написать
bus.RespondAsync<Command, Responses>(fun x -> handle x) |> ignore
А когда использую “авто-исправление”, он меняет на код с ошибкой ?

Klei
04.07.2017
11:18:27

Igor
04.07.2017
11:19:11
Что-то не короче “fun x -> handle x” выходит, но спасибо за пример

Летучая
04.07.2017
11:19:51
лучше обёрточку сделать

Google

Летучая
04.07.2017
11:19:55
|> asFunc
изолировать страшномордие!

Friedrich
04.07.2017
11:20:49
Хозяйке на заметку: new Func<Something> чаще всего можно заменять на Func<_> (опустив new и аргументы генерика).

Igor
04.07.2017
11:23:05
|> asFunc
ОК, если это больше одного раза встретится у меня в коде, то наверное вынесу

Pawel
04.07.2017
11:23:32
Можно ли ionide заставить не показывать тип выражения? Меня это бесит. умники блин...

Igor
04.07.2017
11:24:16
”editor.codeLens": false,

Pawel
04.07.2017
11:25:21

Igor
04.07.2017
11:26:01

Pawel
04.07.2017
11:26:28
firacode. Оч рекомендую

Igor
04.07.2017
11:27:34
У меня тоже, только почему-то буквы пожирнее (может из-за того что мак без ретины)

Vasily
04.07.2017
11:41:07
Вопрос знатокам алгоритмов
Есть список диапазонов, надо сгруппировать по пересекающимся

Google

Vasily
04.07.2017
11:42:01
Однострочником пока не получается что-то
Крутятся мысли про фолд...

Летучая
04.07.2017
11:44:52

Vasily
04.07.2017
11:46:23
("1","5"),("2","4")-> [[("1","5"),("2","4")]]
Типа такого
По факту, нужен список массивов непересекающихся множеств

Pawel
04.07.2017
12:00:02

Vasily
04.07.2017
12:04:05
Мне нужно то, что называется disjoint set
Как мне кажется
Я в целом знаю, как это написать в императивном стиле

Sergey
04.07.2017
12:59:12
у Седжвика в курсе была такая задачка
nlogn сложность
там речь шла о поиск и сортировка дорожек на печатной плате

Pawel
04.07.2017
13:11:46

Klei
04.07.2017
13:13:04
Есть список диапазонов, надо сгруппировать по пересекающимся
Вроде так:
let group items =
let folder (border, currentGroup, acc) (left, right) =
if left <= border
then (max right border, (left, right)::currentGroup, acc)
else (right, [left, right], currentGroup::acc)
match items |> Seq.sort |> List.ofSeq with
| (left, border)::items -> (items, (border, [left, border], [])) |> Some
| _ -> None
|> Option.map (fun (items, state) ->
List.fold folder state items
|||> fun _ current acc -> current :: acc)
|> Option.defaultValue []

Vasily
04.07.2017
13:17:50
Ну я примерно так и написал, только работает медленно, зараза такая
Там квадратичная сложность практически

Pawel
04.07.2017
13:35:41
http://www.progletariat.com/blog/2017/06-22-fable-threejs-hello/index.html
@gsomix если хочешь в webgl без боли, рекомендую http://package.elm-lang.org/packages/johnpmayer/elm-webgl/latest/WebGL Там и библиотека более высокоуровневая с чистым и удобным API, и компилятор умеет распарсить текст шейдеров на GLSL и проверить согласованность используемых типов между шейдерами и основной программой.

Nikolay
04.07.2017
13:38:54
let camera = Three.PerspectiveCamera(75.0, width() / height(), 0.01, 1000.0)
camera.matrixAutoUpdate <- true
...
фи

Google

Friedrich
04.07.2017
14:43:30

Evgeniy
04.07.2017
18:24:20

Nikolay
04.07.2017
19:05:46
Funogram
30
Downloads
Кто все эти люди?

Летучая
04.07.2017
19:06:04
nuget restore packages твои мб
а вообще аналогов же нет
так что будут расти

Nikolay
04.07.2017
19:06:32
Ну я свою либу сам то не ставил

Evgeniy
04.07.2017
19:06:43
Еще всякие роботы. :)

Nikolay
04.07.2017
20:04:39
let (>=>) a b = a (fun _ -> b)
let cmd (command: string) (h: _ -> unit) =
printfn "Cmd: %s" command
[<EntryPoint>]
let main argv =
let c = cmd "test" >=> printfn "a"
0
Как сделать, чтобы printfn "a" не выполнялось при инициализации?
Если завернуть в fun, то всё ок

Artemy
04.07.2017
20:08:28
let c () = ... printfn "a"?
Или же let c = lazy (...printfn "a")

Nikolay
04.07.2017
20:27:53
Т.е. такой вариант норм работает:
cmd "test" (fun _ -> printfn "a")
Но хочется через оператор:
cmd "test" >=> printfn "a"

Artemy
04.07.2017
20:30:22
Ну можно 2-м аргументом оператора сделать функцию unit -> unit
Или же Lazy<unit>
Или же ещё можно так извратиться:
cmd "test" >=> ( (fun _ -> printfn "a") () )

Aleksander
04.07.2017
20:31:39
https://stackoverflow.com/a/34235253 - пишут что никак. либо замыкания, либо lazy, либо игры с let! или quotations

Artemy
04.07.2017
20:32:50
Да, короткого варианта не будет. Это не Хаскелл.

Google

Artemy
04.07.2017
20:34:56
М.б. вариант с Lazy покрасивее будет, чем через функцию (unit -> unit).

Igor
04.07.2017
20:55:13

Artemy
04.07.2017
20:55:55
Это ключевое слово, которое работает как функция-конструктор Lazy<_>.
Вроде так

Igor
04.07.2017
20:56:11
Блин, не гибко как-то (свой lazy не напишешь)

Artemy
04.07.2017
20:56:37
Мне ещё интересно, почему есть ключевое слово lazy, но ключевого слова force нету

Igor
04.07.2017
20:58:28
Я думал понятно написал ?
Лишние ключевые слова засоряют язык (expression problem), а тут еще всякие начинают требовать еще force ?

Artemy
04.07.2017
20:58:54
А .вот о чём речь
Ну я скорее к тому, что либо надо оба lazy и force ключевыми словами сделать, либо оставить и то и другое в виде функций.
Но это мне так кажется на первый взгляд. Возможно, я не прав.

Aleksander
04.07.2017
21:10:38
ну и можно сделать такую сомнительно полезности штуку:
let (!>) a b = (fun b -> a b)
let cmd (command: string) (h: _ -> unit) =
printfn "Cmd: %s" command
[<EntryPoint>]
let main argv =
let c = cmd "test" (!> printfn "a")
0

Pawel
05.07.2017
04:34:16

Evgeniy
05.07.2017
04:57:47
Ух!
https://github.com/Microsoft/visualfsharp/issues/3303

Friedrich
05.07.2017
05:48:36
А Rider поддерживает F# на .NET Core чтоли? Проекты начали открываться.
Правда, подсвечивает несуществующие ошибки :(
Но запускалка тестов работает, например.

Evgeniy
05.07.2017
06:28:12
> Best advice for folks learning #fsharp:
> Don't try to write Haskell/C#/Ruby/Python/etc. You'll have a better time if you don't "bring idioms"

Pawel
05.07.2017
10:25:02

Google

Evgeniy
05.07.2017
10:32:01

Pawel
05.07.2017
10:37:51
Иногда тоже задаюсь этим вопросом) Но >=> - вне всякого сомнения тяжкий грех

Evgeniy
05.07.2017
15:25:05
Вакансия мечты. *__*
https://jobs.lever.co/tachyus/aa682cc3-94f6-428c-9b29-2e3fcb96e0bd

Anton
05.07.2017
16:20:15
и ещё
https://jobs.lever.co/tachyus/400f268f-8144-4543-8a79-669dff06fb4e

Evgeniy
05.07.2017
17:04:09

Anton
05.07.2017
17:06:12
а =)
ну там в описании тоже =)

Igor
05.07.2017
19:01:40
Я теперь понял откуда еще Антон набрал материала для своего легендарного баллонхил.
Вот парочка свежих (но старых) видео с NDC от Scott Wlaschin
https://youtu.be/KPa8Yw_Navk - имхо это надо показывать все C# программистам, что бы заинтересовать их F#
https://youtu.be/Up7LcbGZFuo - ну и классика про DDD

Vlad
05.07.2017
19:26:22

Igor
05.07.2017
19:35:34

Pawel
05.07.2017
19:46:56

Vlad
05.07.2017
19:56:26
посмотрел его доклад, интересно, надо набраться сил и осилить его сайт)

Igor
05.07.2017
19:58:18
Да его и Марка всегда приятно послушать.
Слушайте а pipe |> оператор считается поинтфри стилем?

Vasily
05.07.2017
20:20:49

Roman
05.07.2017
20:32:03

Artemy
05.07.2017
20:33:46

Igor
05.07.2017
20:35:31

Artemy
05.07.2017
20:36:03
Типа x |> f |> g |> h?

Igor
05.07.2017
20:38:29
Ага

Artemy
05.07.2017
20:41:21
Как бы то ни было, мы же задаём аргумент всё-таки.