
Roman
02.05.2017
19:48:25
временно

Летучая
02.05.2017
19:49:01
Всё скрыть

Google

Летучая
02.05.2017
19:49:41
вкладкам наверн границы ток надо

Roman
02.05.2017
19:50:04
Вкладки можно срыть в мобильной версии.

Летучая
02.05.2017
19:50:58
А как переключаться между код блоками?
Или в жопу

Roman
02.05.2017
19:53:19
А про "узнать больше" можно поматывать вниз до секции "почем F#", м?

Летучая
02.05.2017
20:12:11
Хорошая идея :)

Evgeniy
03.05.2017
04:48:06
https://blogs.msdn.microsoft.com/dotnet/2017/05/02/announcing-the-net-framework-4-7-general-availability/

Nikolay
03.05.2017
05:14:38

Friedrich
03.05.2017
05:32:34
Так-то наверняка можно и в старых версиях студии через пакет Roslyn компилировать (он интегрируется с MSBuild). Но редактировать код в старых студиях будет неудобно, потому что они же про новые фичи не знают.

Igor
03.05.2017
07:25:48
Народ, если хочется потыкать ReactJS/Native, то какой язык лучше выбрать если JS очень не нравится?

Google

Akhmed
03.05.2017
07:27:28
попробуй Fable
F# то бишь
https://github.com/fable-compiler/fable-react_native-demo

Igor
03.05.2017
07:30:25
попробуй Fable
Ожидаемо))
Да уже попробовал, тупо не смог собрать это пример.
Он сделал под Windows там build.cmd и в build.fsx прописаны пути типа “C:\Program Files…” и тд, а у меня macOS.

Akhmed
03.05.2017
07:32:38
а отсюда пробовал?
https://github.com/fable-compiler/fable-react

Летучая
03.05.2017
07:37:24

The mirror
03.05.2017
07:42:07
KotlinJS?

Roman
03.05.2017
07:42:31

Igor
03.05.2017
07:42:40
Тайпскрипт еще говорят норм
Да, на не пока и пишу.
Не очень нравится, тк у него функциональная парадигма не очень развита и более вербозна.
Sum type какие-то кривые, патерн-матчинга нет.
KotlinJS?
Это вместе с scalajs / clojurescript оставляю на конец (не хочется вляпываться в настройку язык + reactnative).
Смотрел еще PureScript но он уже очень похож на Haskell, imho это минус.

The mirror
03.05.2017
07:45:10
Elm?
ClojureScript :)

Igor
03.05.2017
07:46:31
Elm?
Кстати вариант, но разве он не только для описания UI используется?
Бизнес логику там можно будет написать?

The mirror
03.05.2017
07:47:01
Вот не знаю, сам не писал ничего на нем, пару раз слышал, что более-менее
Правда еще слышал, что много бойлерплейта
Посмотри доклады, на fpconf вроде был один про него

Igor
03.05.2017
07:47:54

Roman
03.05.2017
07:48:21

The mirror
03.05.2017
07:48:23
https://www.youtube.com/channel/UCmiGqOz-jojsWUVXLZJ8mCw/search?query=elm

Google

Roman
03.05.2017
07:49:00

Igor
03.05.2017
07:54:47

Friedrich
03.05.2017
09:17:10
Union type вполне себе самый настоящий, здоровский.

Igor
03.05.2017
09:17:45

Friedrich
03.05.2017
09:18:59
А в чем различия?
Множество значений sum type представляет собой *сумму* значений входящих типов, а для union type — *объединение*.
Соответственно, sum<int, int> ≡ A of int | B of int. А union<int, int> ≡ int.
Sum type ещё иногда называют "tagged unions", а union type называют "untagged unions".
Оба имеют применение в теории типов, хотя про sum type чаще говорят почему-то.

Evgeniy
03.05.2017
09:20:39
@fvnever Что?
Почему sum -- это tuple?

Friedrich
03.05.2017
09:20:54
Ой
Да, наврал.

Friedrich
03.05.2017
09:21:21
(поправил)
Кортеж это product, да.

Igor
03.05.2017
09:22:24
Shape = | Circle | Reactangle
В F# это sum или union?

Friedrich
03.05.2017
09:22:35
Это чистый tagged union.
Т.е. sum type.

Evgeniy
03.05.2017
09:23:52
@fvnever Мне кажется, ты что-то упускаешь.

Friedrich
03.05.2017
09:24:05
Да вроде бы нет. Ты же сам недавно мне статью показывал.

Igor
03.05.2017
09:24:09
А это в TypeScript?
class Google { constructor(readonly email: string) { } }
class Facebook { constructor(readonly number: string) { } }
type Account = Google | Facebook

Google

Friedrich
03.05.2017
09:24:20
А это union type.

Evgeniy
03.05.2017
09:24:25
Разве union types не являются по сути просто sum types но без тегов?

Friedrich
03.05.2017
09:24:53

Evgeniy
03.05.2017
09:25:15
А, это важно, да.
Понял.

Friedrich
03.05.2017
09:25:30
В TS без strict null checks каждый тип населяется также значениями null и undefined.
И без тегов ты в дальнейшем не сможешь никак узнать, из какого же тега они взялись.

Igor
03.05.2017
09:26:37
А это union type.
Я не понимаю в чем отличие от этого кода в F#:
type Google = { email: string }
type Facebook = { number: string }
type Account = Google | Facebook
по использованию это одно и тоже

Admin
ERROR: S client not available

Friedrich
03.05.2017
09:26:53
На мой взгляд, смысл этих выражений отличается.
Ну, в той же мере, в которой tagged union отличается от untagged :(

Igor
03.05.2017
09:28:02

Evgeniy
03.05.2017
09:29:14
@angmarr А что ты хотел этим F# кодом показать?
Он совсем не то же самое делает, что TS код.

Igor
03.05.2017
09:29:50

Friedrich
03.05.2017
09:30:04

Evgeniy
03.05.2017
09:30:12
Ты не можешь, например, сделать:
let a: Account = {email = "foo@bar.com"}

Igor
03.05.2017
09:30:57

Evgeniy
03.05.2017
09:31:17
Потому что в твоем F# коде тип Account и типы Google/Facebook живут отдельно.

Google

Friedrich
03.05.2017
09:31:46
@angmarr а ты схитрил и обманул нас невалидным кодом!

Evgeniy
03.05.2017
09:32:03
Ага.

Friedrich
03.05.2017
09:32:09
Правильно на F# будет type Account = Google of Google | Facebook of FaceBook
И вот это очень важно.

Igor
03.05.2017
09:32:18

Friedrich
03.05.2017
09:32:27
Я считаю, что этим самым ты вводишь в свой домен эти конструкторы.
Т.е. у тебя есть не только типы, но и конструкторы для типа-суммы теперь. Отдельная бизнес-сущность такая.

Evgeniy
03.05.2017
09:32:54
@angmarr Нельзя.

Igor
03.05.2017
09:33:06

Evgeniy
03.05.2017
09:33:30
В F#?

Friedrich
03.05.2017
09:33:35

Evgeniy
03.05.2017
09:33:53
Я уже нет.

Friedrich
03.05.2017
09:33:57
В TS это скомпилируется, а в F# не скомпилируется. Вот и разница.
Ну и в TS этот тип никакого оверхеда не добавляет (именно потому, что дополнительной фичи для проверки типов нет).
Ты можешь встроить теги в типы, и тогда проверка типов будет доступна.

Nikolay
03.05.2017
09:36:01
Тайпскрипт норм
Пиши на нём

Friedrich
03.05.2017
09:36:06
У TS философия такая — оверхеда должно быть как можно меньше.

Evgeniy
03.05.2017
09:36:45
@angmarr
Не компилируется в F#:
type Google = { email: string }
type Facebook = { number: string }
type Account = Google | Facebook
let a : Account = {email = "foo@bar.baz"}Компилируется в TS:
class Google {
constructor(readonly email: string) { }
}
class Facebook {
constructor(readonly number: string) { }
}
type Account = Google | Facebook
let x: Account = new Google("foo@bar.baz")
Чтобы не было недопонимания.
Черт!