@Fsharp_chat

Страница 469 из 772
Andrew
06.02.2018
10:48:14
Ага

Anna
06.02.2018
10:48:59
ааааа ? Спасибо! Ещё пара итераций и я прошарюсь, честно ?

Попробую себя в роли редактора теперь ?

Google
Pavel
06.02.2018
11:02:44
я что-то не понимаю или странности: ошибка The types ''a' and 'seq<'a>' cannot be unified, вроде бы, понятная, но какого фига она тут — ен совсем понятно let splitBy predicates seq = let rec loop res curr predIdx s = if predIdx = (List.length predicates) then Seq.append res curr else match s |> Seq.tryHead with | None -> Seq.append res curr | Some head when not (predicates.[predIdx] head) -> let res = Seq.append res [curr] let x = Seq.singleton head s |> Seq.tail |> loop res x (predIdx + 1) | Some x -> //^------ The types ''a' and 'seq<'a>' cannot be unified let c = Seq.append curr [x] s |> Seq.tail |> loop res c predIdx loop Seq.empty Seq.empty 0 seq

тип x — seq<'a>, что полностью соответствует сигнатуре loop, да и в следующем кейсе на ровно этом же месте стоит c, тип которой точно так же seq<'a>

возможно, на пэйстбине будет проще смотреть: https://pastebin.com/iuAP6ydg

уменьшить, чтобы ошибка осталась, к сожалению, у меня не вышло =(

Roman
06.02.2018
11:08:49
Привет!

Ruslan
06.02.2018
11:09:11
привет

Pavel
06.02.2018
11:12:25
seq<'a>

res — seq<seq<'a>>

[curr] — seq<'a> list

просто для аппенда нужны два seq

Evgeniy
06.02.2018
11:13:44
Что-то не сходится.

Seq.append res curr

Google
Evgeniy
06.02.2018
11:13:55
Например.

Видимо, нужно везде [curr].

Pavel
06.02.2018
11:15:05
ну тут получается, что res — seq<seq<'a>>, а curr — seq<'a>, но [curr] — seq<'a> list, что приводится к seq<seq<'a>>

Pavel
06.02.2018
11:16:01
да, на четвёртой строчке ошибка была (которую никто не подсвечивал о,О)

лол, ты прав, спасибо огромное! :)

две такие ошибки были, проглядел %)

Evgeniy
06.02.2018
11:22:39
да, на четвёртой строчке ошибка была (которую никто не подсвечивал о,О)
Ага, потому что он вывел сначала неправильный тип для res.

Pavel
06.02.2018
11:23:11
немного странно, потому что intellisense всё правильно показывал

Evgeniy
06.02.2018
11:23:26
?

А вот это странно, да.

@shishkinpavel Можно завести ишшуй, я думаю.

Pavel
06.02.2018
11:36:54
оок, в течении нескольких дней сделаю маленький примерчик

кстати, этот код ужасен: он много раз вычисляет входную последовательность по частям

нет ли какого-то аналога lazy-seq из clojure?

т.е. последовательность, которая будет вычисляться лениво и, кроме того, кешировать уже вычисленные элементы

Roman
06.02.2018
11:39:51
кстати, этот код ужасен: он много раз вычисляет входную последовательность по частям
Можно попробовать Seq.cache и тогда она будет один раз вычислена

Pavel
06.02.2018
11:40:52
интересно, спасибо!

Roman
06.02.2018
11:41:13
Можно попробовать Seq.cache и тогда она будет один раз вычислена
Но как только будет seq передана в Seq.cache, то она сразу будет вычислена

Pavel
06.02.2018
11:41:37
я быстренько проверил в репле, вроде бы, нет

Google
Pavel
06.02.2018
11:42:43
let a = seq { for i in 10 .. -1 .. 0 do printf "%A" i; yield i };; let b = a |> Seq.cache;; b |> Seq.head;; //prints "10" b |> Seq.head;; //no "10"

A64m
06.02.2018
11:43:46
Но как только будет seq передана в Seq.cache, то она сразу будет вычислена
емнип кеш не вычисляет весь seq, в этом не было бы смысла, а записывает в List элемент, как только он вычисляется и при повторном проходе по seq только отдает готовые

Vlad
06.02.2018
13:01:52
Хотел написать вопрос, пока писал нашел решение

Dmitry
06.02.2018
13:03:04
Хотел написать вопрос, пока писал нашел решение
очень часто такое. Какая-то разновидность Rubber-Duck-Development

Friedrich
06.02.2018
13:11:55
Я что-то нашел. https://github.com/TheAngryByrd/MiniScaffold
Срамновато чуток: .paket/*.exe опять рекомендуют в репу заливать. Вроде же с этим в итоге справились?

Friedrich
06.02.2018
13:13:08
Как справились?
Ну, бинарники из нугета скачиваются, а сам пакет с помощью msbuild-магии привязывался к шагу dotnet restore.

Я точно помню, что что-то такое было

Friedrich
06.02.2018
13:13:53
А бинарники так и надо в гит заливать? Блин, да что ж такое.

Надо это починить! Доколе!

Evgeniy
06.02.2018
13:14:48
Надо это починить! Доколе!
А как это должно работать?

Igor
06.02.2018
13:14:59
А бинарники так и надо в гит заливать? Блин, да что ж такое.
В gradle же заливают gradle-wrapper.jar в сорцы и норм

Friedrich
06.02.2018
13:15:09
В gradle же заливают gradle-wrapper.jar в сорцы и норм
Ну и это тоже дребедень, господа.

Я не должен доверять артефактам, которые автор залил в репу

Я должен доверять только тому, что я могу на глаз проверифицировать, или что скачивается с серверов, которым я доверяю.

Google
Friedrich
06.02.2018
13:16:07
А то мало ли чего он там под видом paket.exe назаливает

Кулибиным запросто может прийти в голову светлая мысль скрафтить себе кастомный paket.exe с телеметрией или чёрт знает чем.

Ну то есть вы не подумайте, я не против пакета, а даже наоборот. Но с наколеночной дистрибьюцией надо что-то решать.

Evgeniy
06.02.2018
13:18:22
@fvnever Можно нугетом скачать что-нибудь и просто положить в нужную папку?

Evgeniy
06.02.2018
13:18:56
А через dotnet?

Friedrich
06.02.2018
13:18:58
Вопрос в том, можно ли дотнетом :)

Тут надо думать. Я полагаю, что можно будет извратиться через msbuild. Подписаться на тот же самый шаг restore, да и написать свой кастомный инлайн-таск или что-то в этом роде.

Vlad
06.02.2018
13:23:06
Это вы про pseq?

Evgeniy
06.02.2018
13:24:15
Это вы про pseq?
Да про все проекты с Paket.

Artem
06.02.2018
13:34:05
а есть какой нибудь аналог IEnumerable<T>.Join? в std f#?

Artem
06.02.2018
13:39:09
Seq.zip ?
zip но тут одинаковый сайз нужен

да походу проще подтащить LINQ

точнее мне нужно ('a option[] * 'b option[]) -> ('a option * 'b option)[] наверно просто функцию написать

Igor
06.02.2018
14:22:03
А есть разница, если в коде ниже заменить return! на do! let rec loop () = async { let! cmd = inbox.Receive () do! .. return! loop () } Оно скомпилируется, но боюсь что останется ссылка на переход и это может вызывать memory-leak

Sergey
06.02.2018
15:11:00
https://twitter.com/tamizhvendan/status/960888482406154242

Vladimir
06.02.2018
15:14:33
оо, то что надо)

Google
Vladimir
06.02.2018
15:15:40
от меня первая звездочка на гитхабе)

Vlad
06.02.2018
15:36:36
а как Seq.cache работает? это как лист приведенный к ienumerable и обратно?

Pavel
06.02.2018
17:27:57
и ещё вопрос про последовательности: Seq.append и Seq.concat зачем-то в момент вызова вычисляют все последовательности, переданные им, можно ли этого избежать? (для настоящего ленивого вычисления)

Sergey
06.02.2018
17:54:35
а как Seq.cache работает? это как лист приведенный к ienumerable и обратно?
https://github.com/Microsoft/visualfsharp/blob/master/src/fsharp/FSharp.Core/seq.fs#L969-L1022 не совсем, но коменты не плохи

Klei
06.02.2018
19:03:43
и ещё вопрос про последовательности: Seq.append и Seq.concat зачем-то в момент вызова вычисляют все последовательности, переданные им, можно ли этого избежать? (для настоящего ленивого вычисления)
Ни concat, ни append не вычисляют последовательности при передачи. Как бы исключение: в REPL можно напороться на вычисление n-ного количества первых членов последовательности для визуализации.

Roman
07.02.2018
08:50:45
Афигеть!

A new experiment: Browser-based web apps with .NET and Blazor | .NET Web Development and Tools Blog https://blogs.msdn.microsoft.com/webdev/2018/02/06/blazor-experimental-project/

https://twitter.com/k_cieslak/status/960859530434367488

Siarhei
07.02.2018
09:02:22
Andrew
07.02.2018
09:23:33
Видимо, не выдержали когда придумывали название)

Kirill
07.02.2018
09:24:57
а код-то где?
если показать код, то может оказаться всё не таким смешным

Roman
07.02.2018
09:28:51
> Browser + Razor = Blazor Откуда "l" взялась?)
Просто Brazor звучит как-то не очень)

Sergey
07.02.2018
09:31:06
Лысый из Brazor

Vlad
07.02.2018
09:32:46
> Browser + Razor = Blazor Откуда "l" взялась?)
возможно отсюда https://www.urbandictionary.com/define.php?term=420%20Blaze%20It

Evgeniy
07.02.2018
09:33:57
FSharp + Babel = Fable Ну такое. :)

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