
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 не нравится.
Недостаточно современно
Ну а насчёт бликов согласен

Roman
28.09.2017
08:38:40

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 ?

Evgeniy
28.09.2017
09:38:51

Artemy
28.09.2017
09:39:19

Friedrich
28.09.2017
09:39:32

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

Evgeniy
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

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
И вообще, это ж парсер дописывать.

Artemy
28.09.2017
09:44:47

Evgeniy
28.09.2017
09:45:14

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, так и обычный, но при этом с одним и тем же набором функций.

Roman
28.09.2017
09:47:07

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

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

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

Evgeniy
28.09.2017
09:49:53
Это имело смысл для кортежей.

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

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

Friedrich
28.09.2017
09:55:05

Evgeniy
28.09.2017
09:55:46