
Pavel
30.05.2017
13:41:05

Roman
30.05.2017
15:10:48
крутотенюшка

Nikolay
30.05.2017
15:14:20
Сколько стоит? :)

Летучая
30.05.2017
15:15:04
200р за все полотно

Google

Летучая
30.05.2017
15:15:45

Nikolay
30.05.2017
15:16:24
Я бы хотел рельефную :3
И почему не сделал белый вариант?)

Летучая
30.05.2017
15:20:13
Черный по идее более официальный (такие цвета на фшарпдоторг). Ну и + у него белая обводка есть.

Igor
30.05.2017
15:24:51
Покажи наклеенный.
Какой размер?

Летучая
30.05.2017
15:45:29

Igor
30.05.2017
15:46:08
Что за размер? Ты вырезал или они были вырезаны?
Интересно, как они будут на светящемся яблоке смотреться

Летучая
30.05.2017
15:46:48

Axm
30.05.2017
15:49:34
И сколько обходится такой лист?

Evgeniy
30.05.2017
16:00:18
200р за все полотно

Friedrich
30.05.2017
16:56:40

Aminion
30.05.2017
17:44:28
Поясните за инверсию контроля в фп, я так понимаю, так же просто, как в ООП, разруливать зависимости не возможно?

Google

Vagif
30.05.2017
17:47:19
@neftedollar у нас Akkling в планах стоит. Там гораздо лучше F# API реализован, чем в нынешней Akka.NET, плюс всякие добавки для кластера, streams и т.п. В июле планируем переписать основной наш код под Akkling.

Igor
30.05.2017
17:49:55

Vasily
30.05.2017
17:51:59
Ну в целом , учитывая каррирование,di действительно выглядит костылем

Igor
30.05.2017
17:58:05

Roman
30.05.2017
19:16:00

Vagif
30.05.2017
19:21:00
Нет, не мерил сейчас. А на коде акклинг отразится сильно, многое надо будет переписать, но это к лучшему :-)

Nikolay
30.05.2017
19:23:16
if msg.Text.IsSome then Some(msg) else None
Как это записать функциональнее? :)

Roman
30.05.2017
19:28:44

Nikolay
30.05.2017
19:28:58
Так ок?

Roman
30.05.2017
19:29:30

Artemy
30.05.2017
19:30:02

Nikolay
30.05.2017
19:30:22
Да я тут немного накосячил :3
Не помню как эти штуки называются, которые в паттерн матчинге используются

Roman
30.05.2017
19:31:18
Используй match он приятнее будет)
match msg.Text with
| Some _ -> Some msg
| _ -> None

Nikolay
30.05.2017
19:32:20
Я в общем делаю обработку сообщений от бота :)

Artemy
30.05.2017
19:32:22
Ой, это я точку упустил

Roman
30.05.2017
19:32:38

Google

Artemy
30.05.2017
19:34:46
Ура! ?

Roman
30.05.2017
19:54:18
Такой посыл :
В максимум восьми словах нужно описать призыв к писать на f#, что -то вроде манифеста.
У Scala(если не ошибаюсь это они придумали) было "пиши меньше - делай больше"

Летучая
30.05.2017
19:58:09
write less do more эт жс
жквери

Roman
30.05.2017
20:02:48
У меня пока родилось что-то вроде Write it once
Хотя я не уверен, что правильно написал.
"Пиши один раз. Правильно" на русском какой-то такой посыл.

Летучая
30.05.2017
20:04:41
Пиши без х*%?и.

Serge
30.05.2017
20:09:34
Functional for Fun. F#.
Ну, или "F#" на первое место ?
или:
Fun for Function. Functional for Fun.
(слишком "американско", но как вариант...)

Igor
30.05.2017
20:11:46
Хороший слоган для C# 8.0 (с и их рекордами и тд).

Roman
30.05.2017
20:12:23

Serge
30.05.2017
20:13:07
Гм... Призыв — это императив, вообще-то ?

Летучая
30.05.2017
20:37:49
for Fun and Productive

Nikolay
30.05.2017
20:50:35
https://github.com/Dolfik1/Funogram/blob/master/Funogram.TestBot/Router.fs
Уродливо, да?

Google

Летучая
30.05.2017
20:57:00
if text = "/commands" then
Some("")
else None
match text with
| "/commands" -> Some("")
| _ -> None
Матч имхо нагляднее и понятнее ифов

Nikolay
30.05.2017
20:57:54
А это не используется уже)
Надо выпилить

Летучая
30.05.2017
20:58:45
Еще такой момент
Telegram.SendMessage везде императивно дергаешь с таплом. Мб применить каррирование и ввести частичные функции? (или как они называются)

Nikolay
30.05.2017
21:00:09
А к таплу же нельзя каррирование применить?

Летучая
30.05.2017
21:00:53
Да, но можно сделать идиоматик-обертку. В коде выше очень часто используется такая конструкция:
processError <| Telegram.SendMessage(token, ChatId.ChatIdLong(msg.Chat.Id), "Test <b>HTML</b>", ParseMode.HTML)
Почему бы не сделать функцию:
let sendMessage token chatId text parseMode =
(token, chatId, text, parseMode)
|> Telegram.SendMessage
|> processError
И дополнительную функцию, чтобы избежать копипасты:
let sendChatMessage token msg text parseMode =
sendMessage token ChatId.ChatIdLong(msg.Chat.Id) text parseMode
Есть ещё вариант сделать жирную обёртку для функции Telegram.SendMessage со всеми аргументами, а потом разбить это всё с помощью каррирования на несколько более простых функций и дёргать их. Вот кстати вместо дефолтных параметров C# можно юзать дефолтно-параметризированные функции c:
@Dolfik


Aleksander
30.05.2017
21:17:14
let csSendMessage (token, chatId, text, parseMode) = printf "%A" (token, chatId, text, parseMode)
let sendMessage token chatId text parseMode = csSendMessage (token, chatId, text, parseMode)
let token = "token"
let chatId = "chatId"
let sendMessage'' text parseMode = sendMessage token chatId text parseMode
sendMessage'' "hello" "plain"
как-то так, например?

Летучая
30.05.2017
21:19:41

Aleksander
30.05.2017
21:20:43
'' - да, просто имя. обозначил так функцию с двумя закаррироваными аргументами
и, если уж придираться, то главных недостатка пока вижу два
- сложно расширять. надо прописывать новую команду в три разных места
- тема разбора параметров команды не раскрыта ?
это если подходить к этому коду как к референсной имплементации

Friedrich
31.05.2017
04:03:59

Evgeniy
31.05.2017
05:21:00
Может быть будет полезно. Недавно читал статью про то, как в Haskell сделать расширяемые команды.
https://two-wrongs.com/dynamic-dispatch-in-haskell-how-to-make-code-extendable