
Vasily
21.09.2017
09:13:44
Это определение фри монады
В блоге, который я выше привел, подробно написано
Плюс обертывание в билдер

Aleksey
21.09.2017
09:14:17
Фри-монада, это идея. Способов её закодировать бьльше, чем один

Google

Pavel
21.09.2017
09:14:22
да, просмотрел поверхностно

Aleksey
21.09.2017
09:14:50
И фримонада, это законы в первую очередь. А для простых продолжений законы не требуются

kana
21.09.2017
09:14:54
Fix ((->) a) - твой тип
Fix f = Fix { unFix :: f (Fix f) }

Evgeniy
21.09.2017
09:16:20

Friedrich
21.09.2017
09:16:27

Aleksey
21.09.2017
09:16:29
Вот-вот, это хаскель уже
Не надо людей путать

kana
21.09.2017
09:16:40
А в фшарпе разве так нельзя?

Vasily
21.09.2017
09:16:42
ВОт не надо нам тут этого вашего хаскеля

Evgeniy
21.09.2017
09:16:49
Да, давайте Haskell обсуждать в @haskellru.

Vasily
21.09.2017
09:16:56
Давайте уже более православно

Friedrich
21.09.2017
09:17:00

Vasily
21.09.2017
09:17:05
В синтаксе f#

Google

Aleksey
21.09.2017
09:17:45
Это частичное применение типа функции a -> b внутри конструктора типа Fix
Вощм, автору вопроса не нужны ни свободная монада, ни Fix. Ему просто нужна управляемая рекурсия
Так что нечего пугать человека :)

Friedrich
21.09.2017
09:19:59
А как её обычно делают?

kana
21.09.2017
09:21:05
Анфолд, просто возвращать Maybe, если Just - продолжить рекурсию
Если я правильно понял
Можно еще классное слово "анаморфизм" сказать

Aleksey
21.09.2017
09:21:24
Тут скорее Either

Friedrich
21.09.2017
09:22:03
type Next<'a> = End of 'a | Cont of ('a -> Next<'a>)

Aleksey
21.09.2017
09:22:56
Вот! Спасибо за трансляцию :)
Кстати, если хочется именно закодировать получение сообщение с апдейтом состояния, то возможно подойдет что-такое:
type Cont<'message, 'state>
= Cont of 'state
* ('message -> Cont<'message, 'state>)
^ этот вариант, в отличие от update : Msg -> State -> State, может себе позволить иметь свою копию состояния - в замыкании - и только возвращать снэпшоты текущего состояния

Friedrich
21.09.2017
09:36:31
Да, я тоже такое хотел предложить. Можно это решение модифицировать под конкретные нужды — аргументов там добавить, колбэков, всего что душе угодно.

Evgeniy
21.09.2017
09:42:01
@astynax Спасибо!

Aleksey
21.09.2017
09:46:30
Пример счётчика с состоянием
type Message = Inc | Dec
type Cont<'message, 'state> = Cont of
('message -> 'state * Cont<'message, 'state>)
let rec counter n =
Cont (fun msg ->
let newN =
match msg with
| Inc -> n + 1
| Dec -> n - 1;
(newN, counter newN))

Pavel
21.09.2017
09:59:20
спасибо!

Aleksey
21.09.2017
10:04:57
https://ideone.com/dvN10l - живой пример работы счётчика
(ну надо же, я таки могу в F#!)

Igor
21.09.2017
10:19:02
Ребят, я что значит obj?method() - это же идиоматичный F#?
Это позволяте вызвать любой метод или свойтво просто на obj - часто юзается в Fable

Evgeniy
21.09.2017
10:20:18
> Used as an operator for dynamic method and property calls. You must provide your own implementation.

Roman
21.09.2017
10:20:19

Google

Artemy
21.09.2017
10:20:39
Это специальный оператор динамического доступа
У него по умолчанию нету реализации. Т.е. для каждого сценария нужно самому его определять.
Но при этом он зарезервирован, как я понимаю.

Friedrich
21.09.2017
10:22:22
В Fable его и реализовали. Ну или можно самому сделать реализацию, если хочется.
Но лучше б его заворачивать в типизированные функции.

Igor
21.09.2017
10:22:59
А если я просто в F# заюзаю оно упадет?

Artemy
21.09.2017
10:23:04
Там ещё есть тернарный оператор ?<-

Friedrich
21.09.2017
10:23:16

Artemy
21.09.2017
10:23:45
Вот статья про оба этих оператора:
http://codebetter.com/matthewpodwysocki/2010/02/05/using-and-abusing-the-f-dynamic-lookup-operator/
В Expert F# 4.0 они тоже упоминаются, вроде.

Pawel
21.09.2017
11:04:12
лучше бы вместо ? они сделали нормалный dynamic как в C#

Friedrich
21.09.2017
11:05:48
Да, я с этим согласен. Нормальный динамик бывает весьма полезен. Неудобно делать некоторые вещи из-за того, что его нету.

Evgeniy
21.09.2017
11:07:58
А расскажите про dynamic. Почему через ? нельзя того же поведения добиться?
@fvnever ^

Friedrich
21.09.2017
11:10:41
На операторе ? можно разве что динамический поиск свойств прикрутить (что и делают). А для полноценной динамики надо весь код всех методов, которые работают с dynamic, превращать в expression trees.
Можете посмотреть в sharplab.io, во что превращается какой-нибудь простой пример с динамиком. Это страх.
Простым оператором тут не отделаешься, в общем. Это прям отдельный большой compiler facility нужен.

Evgeniy
21.09.2017
11:12:42
Хорошо, надо бы про dynamic перечитать что-нибудь.

Google

Evgeniy
21.09.2017
11:12:52
Просто есть вот такая библиотека.
https://github.com/fsprojects/FSharp.Interop.Dynamic

Friedrich
21.09.2017
11:12:59
https://sharplab.io/#v2:D4AQDABCCMDcCwAoEBmKAmCBhCBvJEhUaMkAsgBQCUeBR9AJgJ4B2AhgLYCWAxhGxAC8EOHXqEQAdgiYA1PwSJ6AXyTKgA==

Evgeniy
21.09.2017
11:13:02
Они пишут, что работают через DLR.

Friedrich
21.09.2017
11:14:07
Надо посравнивать, что из этого получается. Это не совсем полноценная поддержка, но в принципе её может хватать для основных случаев.

Evgeniy
21.09.2017
11:17:20
> Declining per the comments – the combination of the “?” operator, the “obj” type is sufficient for F#, plus the FSharp.Dynamic library is a good example of how to achieve this in purely library code.
> Don Syme, BDFL F# Language/Library Evolution

Igor
21.09.2017
11:17:20

Evgeniy
21.09.2017
11:17:46
Мне нравится, как Дон подписывается BDFL.

Vlad
21.09.2017
11:19:32

Evgeniy
21.09.2017
11:19:51
Так себя, кажется, Гвидо называл.
Привет!

Moony
21.09.2017
11:48:18
Привет!

Evgeniy
21.09.2017
11:49:09
Смотрите, какой интересный туториал.
> fsharp tutorials: *nix, docker, vim, mono, paket, oh my!
https://github.com/stephen-swensen/fsharp-tutorials
Без msbuild и в vim. В комментариях заметили, что такой подход не скейлится, но студентов учить — нормально.

Pawel
21.09.2017
13:35:35

Oleg
21.09.2017
16:51:05
@ruzzke_mir Так что там с Fable не так? Я пет-проект один начинаю, в нем много математики, поэтому F#, но целевая платформа - JS и мне интероп с JS библиотеками нужен

kana
21.09.2017
16:53:15
И @ruzzke_mir ты так тогда не ответил, что с пурсой не так

Evgeniy
21.09.2017
18:54:15


Pawel
21.09.2017
19:25:44
Удачи тебе в написании проекта. Лучше делать его на том, что нравится здесь и сейчас, чем мучительно выбирать инструменты. Я вообще начинал программирование на C++.
я писал уже здесь что с fable не так)
- чтобы собрать хелуворд, надо тащить webpack + babel + npm + dotnetcore. В 17 году это нонсенс. При чём webpack и babel - это то, что хотелось бы никогда не знать. Изучать их специально для fable что-ли? Как должно быть - npm install fable-compiler - и всё. Так работает BuckleScript, Elm, TypeScript, Gopherjs.
- документации 0
- интсрументов 0. Ionide я инструментом не считаю, хотя ни разу не навязываю тебе своего мнения. На мой взгляд это школотронство, а не инструмент для разработки ПО
- для изоморфных приложений на F# есть прекрасное фронтенд решение - WebSharper UI Next, интегрированное с прекрасным ajax-фрейм ворком.
- я уже задавал здесь вопрос на который не получил ответ. Что именно с fable не так, более или менее понятно. Остаётся выяснить, что в fable хорошего, что давало бы основания использовать его (или её, уж не знаю) вместо WebSharper, TypeScript, Elm, BuckleScript, Gopherjs - вот в чём пойнт.

Google

Pawel
21.09.2017
19:26:24
^ @OlegZee

kana
21.09.2017
19:31:03
Я не писал на пурскрипте и не знаю его, мне чисто интересно, потому что я собираюсь это делать)

Pawel
21.09.2017
19:38:43
elm - готовый фреймворк с довольно большим и активным сообществом. В нём классный рантайм с доставкой сообщений и управлением эффектами, лучше инструменты для сборки. Есть очень годные либы. Даже если принять как факт, что PS лучше как ЯП (с чем тоже можно постпорить), я не вижу основанить использовать его, а не Elm

kana
21.09.2017
19:43:20
Встроенный фреймворк элма является как плюсом, так и минусом, так как сильно ограничивает применение элма. Как я понял, пурса позволяет нам писать, например, какую-нибудь логику типа редьюсеров для редакса, а вьюхи на жс. Потому что выхлоп на жс очень близок к коду на пурсе

Pawel
21.09.2017
19:46:13
Elm-архитектура - это и есть "что-то типа редьюсеров для редакса". Редакс - это урезанный elm, адаптированный для умственно отсталых node js боев - убрали эффекты и комппозицию, и вуаля.

kana
21.09.2017
19:51:22
Я к примеру написал, вместо редьюсера возьми любую другую логику, функции для обработки данных например.
Написать одну функцию на пурсе и интегрировать в проект ничего не стоить

Pawel
21.09.2017
19:53:41
функции для обработки данных например - это что имеется ввиду?

Vladimir
21.09.2017
19:54:42
- чтобы собрать хелуворд, надо тащить webpack + babel + npm + dotnetcore. В 17 году это нонсенс. При чём webpack и babel - это то, что хотелось бы никогда не знать. Изучать их специально для fable что-ли? Как должно быть - npm install fable-compiler - и всё. Так работает BuckleScript, Elm, TypeScript, Gopherjs.
в 17 году веб проект без webpack+babel+npm это нонсенс

kana
21.09.2017
19:57:21
Ну я же говорю, что это все к примеру. Любой хелпер там, который дату форматирует, локальную базу данных, любую хрень, что пишут на фронте можно вынести в пурсу. Хоть бэкенд на нем пиши. Элм так не может, потому что сильно заточен под конкретный юзкейс.


Pavel
21.09.2017
19:57:30
Удачи тебе в написании проекта. Лучше делать его на том, что нравится здесь и сейчас, чем мучительно выбирать инструменты. Я вообще начинал программирование на C++.
я писал уже здесь что с fable не так)
- чтобы собрать хелуворд, надо тащить webpack + babel + npm + dotnetcore. В 17 году это нонсенс. При чём webpack и babel - это то, что хотелось бы никогда не знать. Изучать их специально для fable что-ли? Как должно быть - npm install fable-compiler - и всё. Так работает BuckleScript, Elm, TypeScript, Gopherjs.
- документации 0
- интсрументов 0. Ionide я инструментом не считаю, хотя ни разу не навязываю тебе своего мнения. На мой взгляд это школотронство, а не инструмент для разработки ПО
- для изоморфных приложений на F# есть прекрасное фронтенд решение - WebSharper UI Next, интегрированное с прекрасным ajax-фрейм ворком.
- я уже задавал здесь вопрос на который не получил ответ. Что именно с fable не так, более или менее понятно. Остаётся выяснить, что в fable хорошего, что давало бы основания использовать его (или её, уж не знаю) вместо WebSharper, TypeScript, Elm, BuckleScript, Gopherjs - вот в чём пойнт.
В fable из обязательных зависимостей только babel, все остальное на свой вкус. В дефолтовом темплейте помоему yarn используется. Плюсы fable в том, что это транспайлер f# в js. Это не огромный фреймворк как websharper или elm, а небольшая тулза, которая помогает перенести f# в js. И это не ограничивается фронтом, можно без проблем писать сервер на ноде, или десктоп на электроне. И самое главное, что fable тебя не ограничивает (теоретически) в выборе js библиотек, фреймворком. В общем я не вижу смысла сравнивать websharper с fable. Тут разумно сравнивать с typescript. Если устраивает синтаксис и инструменты TS то лучше взять его,ну или elm.


kana
21.09.2017
19:58:06
Вебпак, кстати, уже потиху становится опциональным, уже появляется статьи, как писать так, чтобы бандл грузился только если бразуер не смог загрузить жс-модули.
Бабель тоже, следовательно

Pavel
21.09.2017
19:59:44
Нет, без бабеля никак

kana
21.09.2017
20:00:08
Если браузер грузит жс-модули, то и бабель уже не нужен, а бандл с бабелем загрузиться лишь как фолбек

Pawel
21.09.2017
20:00:16

Vladimir
21.09.2017
20:02:15


Pawel
21.09.2017
20:03:47
В fable из обязательных зависимостей только babel, все остальное на свой вкус. В дефолтовом темплейте помоему yarn используется. Плюсы fable в том, что это транспайлер f# в js. Это не огромный фреймворк как websharper или elm, а небольшая тулза, которая помогает перенести f# в js. И это не ограничивается фронтом, можно без проблем писать сервер на ноде, или десктоп на электроне. И самое главное, что fable тебя не ограничивает (теоретически) в выборе js библиотек, фреймворком. В общем я не вижу смысла сравнивать websharper с fable. Тут разумно сравнивать с typescript. Если устраивает синтаксис и инструменты TS то лучше взять его,ну или elm.
на свой вкус без вебпака и npm- это самому писать билд-скрипт? спасибо - не надо нам такого счастья. Ты же понимаешь надеюсь что ни кто этого не будет делать, да? Есть шаблоны приложений и определённые гайдлайны по конфигу проекта и интсрументам. Неужели кому то придёт в голову юзать fable без них?


kana
21.09.2017
20:03:59
Таки умеют, в сафари только поведение необычное) С css все сложно, да. Я использую стайлед, но от css-модулей людям придётся отказаться. И собирать будут по старинке галпом, если уж нужно что

Vladimir
21.09.2017
20:05:05
http://caniuse.com/#feat=es6-module - разве это умеют?

kana
21.09.2017
20:06:46
Ну да, не все красное же. Понятно, что без фолбека с бандлом писать не получится, но никто и не призывает так делать. Вебпак из основой платформы станет полифилом