
Kirill
06.03.2018
13:42:55
ооп отстой — это всем известно
но приходится это терпеть из-за хайпа

Vlad
06.03.2018
13:43:12
с чего же

Kirill
06.03.2018
13:43:34
с того, что алгебраические типы данных шире и гибче

Google

Vasily
06.03.2018
13:43:40
Почему?
с т.з. впф биндинги - это всего лишь часть отображения, и тащить их куда-то в код моделей, например, смысла нет

Bonart
06.03.2018
13:43:41

Vasily
06.03.2018
13:43:50
Модели должны быть максимально чистые

Alex
06.03.2018
13:45:22
Просто время ооп проходит. Было время дирижаблей, теперь время сверхзвуковых.

Evgeniy
06.03.2018
13:45:36
Давайте прекратим "ООП против ФП" срач и пойдем читать шестую главу Expert F#.

Andrey
06.03.2018
13:45:44
Лель.

Siarhei
06.03.2018
13:58:19

Roman
06.03.2018
14:01:19

Siarhei
06.03.2018
14:03:56

Pavel
06.03.2018
14:07:08
Фига себе гибче, они же не изменяемые!

Friedrich
06.03.2018
14:32:06
Ох, шутники :)

Tony
06.03.2018
15:54:24

Kirill
06.03.2018
16:17:57

Google

Klei
06.03.2018
17:35:10

Kirill
06.03.2018
17:38:11
не понял вопроса

Klei
06.03.2018
17:42:17
Это же неверно:
В языке программирования F# АТД реализованы ограниченно исключительно в виде безопасных с точки зрения типизации размеченных объединений (union), то есть все АТД в языке F# являются типами-суммами. Например:
type SomeType =
| Constructor1 of int
| Constructor2 of string
Вот это приводится как полное АТД из OCaml:
type suit = Spades | Diamonds | Clubs | Hearts;;
type card =
Joker
| Ace of suit
| King of suit
| Queen of suit
| Jack of suit
| Number of suit * int
;;
В F# же можно также.
Или я неправильно понял?

Диёр
06.03.2018
17:43:49
;; в окамл просто убивает

A64m
06.03.2018
17:45:13
причина для этого еще убийственней, но это больше для соседнего чата про написание компиляторов

Anna
06.03.2018
17:46:52
а то там на скукотищу жалуются

Roman
06.03.2018
18:14:36

Klei
06.03.2018
18:17:26
То что сейчас можно, я знаю. Вопрос в том, а) автор заблуждался, б) когда-то синтаксис F# это реально это не позволял или в) я не заметил какой-то фишки?

Evgeniy
06.03.2018
18:57:52

Klei
06.03.2018
18:58:15

Evgeniy
06.03.2018
19:01:56
@Kleidemos Раньше в DU можно было даже records пихать. :)

Klei
06.03.2018
19:04:08
А зачем выпилили?

Ivan
06.03.2018
19:06:42
Так до сих пор и пихают

Evgeniy
06.03.2018
19:07:16

Google

Evgeniy
06.03.2018
19:19:05
https://github.com/fsharp/fslang-suggestions/issues/52
Можно там спросить, я думаю. Или в слаке, когда Дон будет отвечать на вопросы про дизайн.

Klei
06.03.2018
19:22:56
Ок. Не то что бы я согласен, но причин достаточно для сохранения статус-кво.

A64m
06.03.2018
19:25:26
в окамле сделали

Fill
06.03.2018
19:27:51
может глупый вопрос, но всё же
вот делаю я свой тайп
type Queue<'a> = Queue of 'a list*'a list | Empty
и мне надо, что бы если листы пустые, значение инварианта было Empty. Можно ли этого добиться, не делая тип приватным?
т.е. я не хочу терять возможность создания интсанса вот так Queue([],[]), но чтоб он сразу в Empty устанавливался

Evgeniy
06.03.2018
19:30:06

Klei
06.03.2018
19:30:51

Roman
06.03.2018
19:31:22

Fill
06.03.2018
19:31:54
т.е. типо если у меня будет активвный шаблон на Empty, то и проблемы как бы не существует?
не нравится мне это

Klei
06.03.2018
19:34:09
Если у тебя будет отдельный вариант под Empty и ничем не защищенный Queue, который может принимать абсолютно эквивалентное значение, будет еще хуже.

Fill
06.03.2018
19:34:21
очевидно
насколько я могу судить, проблема тривиальная же

Roman
06.03.2018
19:36:24

Fill
06.03.2018
19:36:57
чую подвох
1

Evgeniy
06.03.2018
19:38:33

Fill
06.03.2018
19:38:49
приватный тип - говно, не удобно использовать будет. Если бы мне нужны были классы, я бы на C# писал

Google

Roman
06.03.2018
19:39:26
https://twitter.com/k_cieslak/status/971058295480995841

Fill
06.03.2018
19:40:15

Evgeniy
06.03.2018
19:41:22

Fill
06.03.2018
19:43:13
но ладно, спасибо за ответы

Evgeniy
06.03.2018
19:44:30
Ну, ок, можешь накостылять свой NonEmptyList и зафорсить их в типе Queue. Но это тоже некоторое неудобство.

Fill
06.03.2018
19:45:02
ещё какое
будут те же проблемы, только уже с листом
буду делать приватный тип в общем(

Klei
06.03.2018
19:46:06
DU нужен для того, чтобы сделать невалидные состояния непредставимыми. Если мы остаемся верны 'a list * 'a list, то Empty в виде case вообще не нужен.

A64m
06.03.2018
19:46:32
ну на DU можно какие-то инварианты энкодить, но делая неправильные состояния непредставимыми, т.е. без сохранения возможности пустую очередь как Q [] [] создавать

Fill
06.03.2018
19:47:20
к слову лист то может быть пустым
но не оба листа

Klei
06.03.2018
19:47:49
Так тебе же предложили сделать один из листов NonEmpty.
Ну, ок, можешь накостылять свой NonEmptyList и зафорсить их в типе Queue. Но это тоже некоторое неудобство.

Fill
06.03.2018
19:48:00
один
и какой же?
они оба могут быть пустыми
но не одновременно

Google

A64m
06.03.2018
19:48:24
в одном конструкторе первый, во втором второй, третий без списков

Fill
06.03.2018
19:48:40
это же приватный тип
с приватным типом я не вижу проблем. Проблема была, что бы сделать без приватного

Ivan
06.03.2018
19:49:43
Очень помогли бы overloads with match. Но это ближе к динамике. что то типа:
type NonEmptyList<'t> = NonEmptyList of 't list
let create([al] as l) = NonEmptyList l
let create(h::t as l) = NonEmptyList l

Fill
06.03.2018
19:50:25
ладно, а кто знает, как в F# сделана родная очередь?

Klei
06.03.2018
19:50:55
type 'a Queue =
| A of 'a list * 'a NonemptyList
| B of 'a NonEmptyList
| C

A64m
06.03.2018
19:51:00
зачем приватный?
Q1 of a list * a nonEmpty | Q2 of a nonEmpty * a list | Empty

Klei
06.03.2018
19:51:37
Я вижу, что могу идти спать. @A64m_qb0 добъет.

Fill
06.03.2018
19:52:42

Evgeniy
06.03.2018
19:52:56

Fill
06.03.2018
19:53:54
персистентных

A64m
06.03.2018
19:55:17
была же в fsharpx очередь, когда я на f# писал. что, куда-то пропала?

Evgeniy
06.03.2018
19:55:58

Fill
06.03.2018
19:56:34

Evgeniy
06.03.2018
19:56:49

Roman
06.03.2018
20:05:57
https://blogs.msdn.microsoft.com/dotnet/2018/03/06/f-language-and-tools-update-for-visual-studio-2017-version-15-6/

Evgeniy
06.03.2018
20:06:47
BEWARE!
https://twitter.com/kot_2010/status/971012683926564866
https://twitter.com/VBragilevsky/status/971094451862032384