
Nikolay
26.04.2017
18:01:21
+ будет применим только в этом случае
А бывает ещё InputFile or String

Klei
26.04.2017
18:02:53
Я просто не понимаю, как с этим типом потом работать?

Google

Nikolay
26.04.2017
18:04:06

Klei
26.04.2017
18:05:12
В прямом. Если есть разница, строка это или число, то видимо область применения их не идентична. А если область применения одна, то почему не использовать строку?

Vasily
26.04.2017
18:05:22
let inline Test<'a> (someId: 'a) =
match box someId with
| :? string -> Some someId
| :? int -> Some someId
| :? int64 -> Some someId
| _ -> None
Вот так работает, но внутри боксинг

Roman
26.04.2017
18:10:02
Да
так сделай
type ChatId =
| IntId of int
| StringId of string
| BigIntId of int64
static member Create(x:int) = IntId x
static member Create(x:string) = StringId x
static member Create(x:int64) = BigIntId x
// Где внутри, не в api
let private getIdFromParser (id:obj) =
match id with
| :? string as x -> ChatId.Create x
| :? int as x -> ChatId.Create x
| :? int64 as x -> ChatId.Create x
//снаружи везде использовать ChatId

Летучая
26.04.2017
18:10:30
1 метод грубо говоря принимает строку и делает дела
А другой дергает тустринг и первый метод
я б такое решение заюзал

Roman
26.04.2017
18:11:21
те кому надо сделать объект идентификатора, пусть пользуют Create, тебе же matchить надо будет толкьо при отправке сообщения. Все

Летучая
26.04.2017
18:12:32
Вон там даже в C# запилили конструкции private int Sum(int a, int b) => a + b;, наверняка в том числе для упрощенного вызова перегрузок

Roman
26.04.2017
18:13:00

Google

Roman
26.04.2017
18:16:07
у тебя в доках прям написано) Сущность идентфикатор чата может быть либо то либо то, тебе же не надо эти айдишники складывать или еще что-то с ними делать, тебе достаточно знать что есть такой ChatId он приходит к тебе снаружи и ты его отдаешь назад. Сначала обернул, потом, в конце, развернул.

Nikolay
26.04.2017
18:18:26

Летучая
26.04.2017
18:18:51

Nikolay
26.04.2017
18:18:58

Летучая
26.04.2017
18:19:02
Тогда оставляй

Nikolay
26.04.2017
18:19:05
Я сам толком не разобрался ещё чё и как там
Короче, я ещё больше запутался)

Летучая
26.04.2017
18:19:58
Оч похоже на танцы с бубнами на пустом месте ?

Nikolay
26.04.2017
18:20:52
Короче, скажите какой вариант будет самый нормальный, и я сделаю его)
Кроме преобразования в строку всего, это костыль, который сработает только в данном кейсе

Igor
26.04.2017
18:23:02
Народ, а есть какие-нибудь легкие видео-доклады про Computation expression,
на тему "как они работают, как написать свой и тд"?

Roman
26.04.2017
18:23:24
https://github.com/SuaveIO/suave/blob/f0831e3ed00c611f78a04ac30d3a065403470274/src/Suave/Web.fs#L69 вот как suaveio работает с кучей значений.
и вот как это выглядит в коде
startWebServer defaultConfig (Successful.OK "Hello World!")

Igor
26.04.2017
18:25:11
ты про seq {}?
термин взял отсюда https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/computation-expressions#built-in-workflows
Перепутал с "computation expression"

Roman
26.04.2017
18:25:34
Там написано) нужно реализовать свой тип c вот этими полями, например https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/computation-expressions#Creating-a-New-Type-of-Computation-Expression

Igor
26.04.2017
18:27:18

Evgeniy
26.04.2017
18:27:31
@neftedollar Я все еще извращаюсь. :) https://hastebin.com/eduwawajah.fs

Google

Roman
26.04.2017
18:28:31

Nikolay
26.04.2017
18:28:39

Roman
26.04.2017
18:28:41

Evgeniy
26.04.2017
18:29:40
@neftedollar show 123

Roman
26.04.2017
18:29:44

Nikolay
26.04.2017
18:31:48
Такое вообще впервые вижу

Roman
26.04.2017
18:32:20
это ты далеко зашел.
давай с твоего кода.

Nikolay
26.04.2017
18:32:57
Ну мне всё то же самое сделать нужно)
И я просто хочу пойти код писать
Скажи мне как сделать)

Roman
26.04.2017
18:33:19
Я прост немного запутался, сначала мне казалось что проблема в chat_id

Nikolay
26.04.2017
18:33:33
Да, chat_id может быть int or string

Roman
26.04.2017
18:33:43
Снчала нужно описать типы которые есть в документации.

Nikolay
26.04.2017
18:33:51
Описал уже
Осталось методы прикрутить

Roman
26.04.2017
18:34:29
как ты сделал chat_id?

Nikolay
26.04.2017
18:34:31
getUpdates и getMe уже сделал, вот второй день пытаюсь придумать как сделать chat_id в sendMessage

Google

Roman
26.04.2017
18:35:13
не ты не понял, send_message должен работать с теми типами которые ты сделал

Nikolay
26.04.2017
18:35:13
А в типах нигде такого нет, только в аргументах, которые в урл как параметр передаётся

Roman
26.04.2017
18:35:24
давай сначала)
Первое что нужно это описать типы сущностей с которыми ты будешь работать.

Nikolay
26.04.2017
18:35:52
https://core.telegram.org/bots/api#available-types

Roman
26.04.2017
18:35:54
Почти везде тебе нужен chat_id

Nikolay
26.04.2017
18:35:58
Ты про это?

Roman
26.04.2017
18:36:23
Я в общем, но в данном случае да)

Nikolay
26.04.2017
18:36:37
Вот в той линке нигде нет Integer or String
Integer or String есть только в вызове методов
Пока не столкнулся с этой проблемой, я всегда использовал обычные аргументы функции, без создания отдельного типа под аргументы метода

Roman
26.04.2017
18:38:56
Увидел.
Тогда у тебя есть два варианта для sendMessage
1. Сделать две разные ф-ции одной на вход string, другой int
потом реализцию примерную напишу.

Nikolay
26.04.2017
18:42:04

Klei
26.04.2017
18:42:08
Когда к тебе приходят chat_id, ты в курсе какой у него тип?

Nikolay
26.04.2017
18:42:44

Roman
26.04.2017
18:43:03
2. Сделать DU только для ф-ции
type SendMessage = |ChatId of in |Username of string

Nikolay
26.04.2017
18:43:44
sendMessage "@Dolfik" "Hello, world!"
sendMessage message.From.Id "Hello, world!"

Google

Nikolay
26.04.2017
18:44:00

Roman
26.04.2017
18:44:29

Nikolay
26.04.2017
18:45:12
С первым вариантом проще тем, кто будет юзать библиотеку (проще вызовы делать), а со вторым мне (меньше кода)?

Roman
26.04.2017
18:46:17
let sendMessage (id:SendMessage) options = ..
let sendMessageId (id:Int) options = sendMessage ChatId(id) options
let sendMessageUsername (username:string) = sendMessage Username(username) options

Nikolay
26.04.2017
18:46:46
А если так?
Это же 4 перегрузки

Roman
26.04.2017
18:47:43
подумай об использовании, from_chat_id руками будет задаваться очень редко
И все же я бы сделал даже для Int свою обертку. type ChatId = ChatId of int всегда работаешь с одним типом int не нужен нигде в коде, где нужен let myFunc (ChatId x) = x // а x уже int

Nikolay
26.04.2017
18:52:12
Т.е. через du?

Roman
26.04.2017
18:52:35
Да, с одним значением

Nikolay
26.04.2017
18:54:04
И ты предлогаешь его использовать в типе чат, в поле Id, вместо int?

Roman
26.04.2017
18:54:27
кстати его можно и расширить
type ChatId = |ChatId of int
member this.forSend() = SendMessage.ChatId (int) //Типа того

Nikolay
26.04.2017
18:55:17
А как он будет string принимать?

Roman
26.04.2017
18:55:31
и это
только теперь вместо let sendMessageId (id:Int) options будет let sendMessageId (id:ChatId) options = sendMessage (id.forSend()) options // приблизительно

Evgeniy
26.04.2017
18:57:56
@neftedollar Укоротил код как мог.
@neftedollar https://hastebin.com/enopepuzeq.fs

Roman
26.04.2017
18:58:15
Можно наоборот у SendMessage сделать принимаемый тип ChatId