@Fsharp_chat

Страница 330 из 772
Evgeniy
28.09.2017
08:24:02
Мне у них логотип не нравится. :(

Artemy
28.09.2017
08:24:14
+++

Evgeniy
28.09.2017
08:24:15
Какой-то нехипстерский.

Artemy
28.09.2017
08:24:47
Ух, а я думал, я один такой.

Google
Artemy
28.09.2017
08:25:15
Но проблема в том, что сам лучше предложить не могу.

Надо попросить того чела, который логотип для Giraffe сделал, придумать логотип для Fable. Ну или автора логотипа Suave.

Летучая
28.09.2017
08:29:40
Artemy
28.09.2017
08:33:20
Не, мне лично как раз-таки эта драконистая футуристичная F не нравится.

Недостаточно современно

Ну а насчёт бликов согласен

Artemy
28.09.2017
08:39:43
LOL

Roman
28.09.2017
08:39:51


и тд

Artemy
28.09.2017
08:41:03
Похоже, эти авторы — любители драконов и рыцарей.

Иначе не объяснишь столь странный выбор иллюстраций.

Google
Siarhei
28.09.2017
08:42:01
могу предположить выбор лого LLVM был связан с одной из ранних книг про компиляторы)

Artemy
28.09.2017
08:44:37
Но тут дракон уже, вроде, кибернетический

Siarhei
28.09.2017
08:45:11
есть такое

Evgeniy
28.09.2017
08:45:43
TIL https://github.com/fsharp/fslang-suggestions/issues/611#issuecomment-332529197

Оказывается, active patterns можно как параметры передавать.

Оно и понятно, active patterns — это просто функции + сахар. Но все равно!

Я вот идею вкинул про struct active patterns, а теперь думаю, как выглядеть будет.

Добавить атрибут? [<Struct>] let (|Even|Odd|) input = if input % 2 = 0 then Even else Odd

Vladimir
28.09.2017
09:31:30
да, выглядит логично

Friedrich
28.09.2017
09:31:37
Норм с атрибутом.

Evgeniy
28.09.2017
09:31:43
И для partial? [<Struct>] let (|Integer|_|) (str: string) = let mutable intvalue = 0 if System.Int32.TryParse(str, &intvalue) then StructSome(intvalue) else StructNone

Friedrich
28.09.2017
09:31:56
Выглядит очень стрёмно, но что поделать — Сайм любит такие штуки :(

Так, стопэ. А что это вообще будет делать? Просто будет возвращать struct Option?

Evgeniy
28.09.2017
09:33:12
StructOption и StructChoice.

Friedrich
28.09.2017
09:33:13
Не сможем ли мы сделать так, чтоб вообще не было изменений в коде, а?

Ну чтоб оно всегда генерило обе функции, например (struct и обычную)?

Evgeniy
28.09.2017
09:33:42
Это как?

Friedrich
28.09.2017
09:34:16
Хотя, блин, как их тогда резолвить потом

Не, не пойдёт, наверное.

Google
Evgeniy
28.09.2017
09:34:43
Еще непонятно, как кейсы у новых DU называть.

Можно сделать чуть больше магии. Чтобы компилятор сам заменял Some на StructSome и так далее. [<Struct>] let (|Integer|_|) (str: string) = let mutable intvalue = 0 if System.Int32.TryParse(str, &intvalue) then Some(intvalue) else None

Будет только аннотацией и типом отличаться.

Friedrich
28.09.2017
09:35:38
Мне не нравится аннотация :(

Ненавижу аннотации. Начиная с F# 4.1 весь код приходится ими обмазывать.

Evgeniy
28.09.2017
09:36:12
Ну, плохие дефолты. :)

Мы не можем тут поведение поломать, я считаю.

Типы у наших паттернов поменяются, нужно как-то различать.

Pavel
28.09.2017
09:38:35
Так может наоборот? По дефолту struct, а аннотация, чтобы сделать ссылочный option, choice ?

Artemy
28.09.2017
09:39:19
Ненавижу аннотации. Начиная с F# 4.1 весь код приходится ими обмазывать.
Непонятно, почему вместо [<Struct>] нельзя везде ключевое слово struct использовать.

Artemy
28.09.2017
09:39:33
Для кортежей же почему-то сделали.

Friedrich
28.09.2017
09:39:51
Или старые кейворды в новых местах.

Vladimir
28.09.2017
09:39:52
struct уже есть

Evgeniy
28.09.2017
09:40:28
Давайте, у нас интересная задачка, облазить design space при таких жестких ограничениях. :)

Artemy
28.09.2017
09:42:57
Дону не нравится!
Так это же не новое ключевое слово, а уже существующее. Я думал, он против введения новых ключевых слов. И это объяснимо. А вот почему бы не использовать уже существующие ключевые слова по возможности, объяснений не нахожу. Хотя я ещё слишком молод, и могу не знать каких-то важных деталей.

Vasily
28.09.2017
09:43:17
Да не нужен там Struct

Vlad
28.09.2017
09:43:23
Google
Evgeniy
28.09.2017
09:43:49
Для кортежей же почему-то сделали.
Неплохо сделали, но не дожали. У нас полиморфизма по struct нету, а могли бы сделать!

Vasily
28.09.2017
09:43:51
Там проще | заменить на ||

Допустим

Evgeniy
28.09.2017
09:44:16
Там проще | заменить на ||
Вглядываться неудобно. :(

Vasily
28.09.2017
09:44:24
Ну {

Evgeniy
28.09.2017
09:44:43
И вообще, это ж парсер дописывать.

Evgeniy
28.09.2017
09:45:14
"Полморфизм по struct" как понимать?
Чтобы можно было реализовать, например, fst и для обычного кортежа, и для struct.

Artemy
28.09.2017
09:45:27
А, это да.

Evgeniy
28.09.2017
09:45:32
У нас, кстати, для struct кортежей вообще fst нет!

Artemy
28.09.2017
09:45:42
Да

Вообще, в принципе неплохо бы какой-то совместимости для struct и обычных типов завести.

Чтобы тот же Option был как struct, так и обычный, но при этом с одним и тем же набором функций.

Evgeniy
28.09.2017
09:47:16
Еще лучше, конечно, в F#5 поломать совместимость и кучу всего вычислить!

Friedrich
28.09.2017
09:47:39
Э, не, ломать совместимость — плохо.

Evgeniy
28.09.2017
09:47:53
Неправильные дефолты, депрекейтнутые и устаревшие конструкции.

Friedrich
28.09.2017
09:47:53
Давайте оставим для совместимости вариант со struct, но поменяем дефолт.

Artemy
28.09.2017
09:48:03
Если бы было автозакрытие [< >], то можно и потерпетьи аннотации.)

Friedrich
28.09.2017
09:48:06
Дефолты поменять — это дело.

Google
Evgeniy
28.09.2017
09:48:19
Дефолты поменять — это дело.
Это ломает же совместимость, нет?

Pavel
28.09.2017
09:48:19
Там проще | заменить на ||
let (\o/ Even \o/ Odd \o/) (str:string) = ...

Evgeniy
28.09.2017
09:48:31
\o/

Friedrich
28.09.2017
09:48:36
Это ломает же совместимость, нет?
Надо ещё смотреть, в какой мере.

Evgeniy
28.09.2017
09:49:12
Ну, давайте я в RFC два варианта предложу: аннотация и поменять дефолт.

Pavel
28.09.2017
09:49:15
Это ломает же совместимость, нет?
да, но как по мне самая прекрасная сторона F# - хорошие дефолты. Ради такого дела можно и поломать :)

Vasily
28.09.2017
09:49:29
Кстати , а что мешает объявлять как let |struct Integer| ?

Evgeniy
28.09.2017
09:49:53
Кстати , а что мешает объявлять как let |struct Integer| ?
Не слишком большое усовершенствование над аннотацией, я думаю.

Это имело смысл для кортежей.

Vasily
28.09.2017
09:50:18
Надо придумать префикс

Evgeniy
28.09.2017
09:50:23
А шаблоны мы отдельно объявляем.

Vasily
28.09.2017
09:50:28
Который бы указывал на value type

Friedrich
28.09.2017
09:51:00
let (︴Even︴Odd︴) ⇸ …

Evgeniy
28.09.2017
09:51:11
Я предалагю эмодзи.

Artemy
28.09.2017
09:51:43
Я предалагю эмодзи.
Вот это подходит для 2к17!

Friedrich
28.09.2017
09:51:47
let ⚠️ (|Even|Odd|) = … ⚠️ будет означать то же, что [<Struct>]

ЪЪ

Vasily
28.09.2017
09:52:55
Тогда уж что-нить вроде !@

Roman
28.09.2017
09:53:07
Чтобы можно было реализовать, например, fst и для обычного кортежа, и для struct.
надо сделать интерфейс ITupebel отнаследовать от него коретежи и let fst<T>(T:where T is ITupebel) .

Friedrich
28.09.2017
09:55:05
Чтобы можно было реализовать, например, fst и для обычного кортежа, и для struct.
Да, вот я как раз это предлагал — чтоб можно было написать один раз, а компилятор генерировал из этого две функции.

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