@Fsharp_chat

Страница 79 из 772
Nikolay
26.04.2017
18:58:52
Мне уже даже неловко)

Google
Klei
26.04.2017
19:04:52
Я пошел спать, но накалякал тут, хз имеет ли это право на жизнь: [<AutoOpen>] module ChatId = type private _chatId = | OfInt of int | OfBigInt of bigint | OfString of string type ChatId private (chatId : _chatId) = new (chatId) = ChatId (OfInt chatId) new (chatId) = ChatId (OfBigInt chatId) new (chatId) = ChatId (OfString chatId) member private this.Content with get () = chatId override this.ToString() = chatId |> string override this.Equals(other) = match other with | :? ChatId as other -> other.Content = this.Content | _ -> obj.Equals(other, this) override this.GetHashCode() = this.Content.GetHashCode() let p0 = ChatId 12 let p1 = ChatId "qwe" let p2 = ChatId 12I

Evgeniy
26.04.2017
19:11:26
@neftedollar Да, получилось интересно. Главное, чтобы никто не додумался это в реальном коде использовать.

Roman
26.04.2017
19:15:01
ща
module A = type ChatId = | IntId of int type Username = | Username of string type ChatType = | Private | Group | Supergroup | Channel //https://core.telegram.org/bots/api#chat //Это приходит из телеграма. type Chat = { Id : ChatId Type : ChatType Title : string option Username : Username option AllMembersAreAdmins : bool /// ... } type SendChatId = | Id of ChatId | Username of Username let sendMessage (id:SendChatId ) options = () ///http.Call POST ... // или module B = type ChatID = | Id of int | Username of string type Chat = { Id : ChatID Title : string option Username : ChatID option AllMembersAreAdmins : bool /// ... } let sendMessage (id:ChatID ) options = () ///http.Call POST

Летучая
26.04.2017
19:54:31
В F# можно как-нибудь получить доступ к this из конструктора типа?

Vasily
26.04.2017
19:57:03
А зачем?

Летучая
26.04.2017
19:57:52
В конструкторе вьюмодели инстанциирую листенер и надо подписать PropertyChanged на его MessageReceived.

В общем-то можно base.OnPropertyChanged, но это как-то аутистично.

Когда есть пропертя.

Vasily
26.04.2017
19:58:19
do

После объявления проперти

Летучая
26.04.2017
19:59:54
let and do bindings must come before member and interface declarations in type definitions

Google
Летучая
26.04.2017
20:00:16
А до он чото всё равно не видит this.

Это баг или фича?

Vasily
26.04.2017
20:04:55
RJl gjrf;b

Код покажи

Летучая
26.04.2017
20:06:57


base тоже запрещает юзать :(

Vasily
26.04.2017
20:07:26
SocketServer на самый верх

Nikolay
26.04.2017
20:07:32
А интерфейсов для записей нет?

Vasily
26.04.2017
20:07:32
do не нужен

Есть просто интерфейсы

И просьба код через pastepin гонять

*pastebin

Со скриншотами херово

Nikolay
26.04.2017
20:09:20
Есть такой аргумент:

InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardRemove or ForceReply

В C# я бы сделал интерфейс IReply и для каждого типа наследовал бы его

Как это в F# сделать лучше?

Vasily
26.04.2017
20:10:00
DU

Летучая
26.04.2017
20:10:25
https://gist.github.com/Worldbeater/b950feadec18c762e680d24256b1a343 Ругается на анекспектед идентифиер ин мембер дефинишон (???)

Nikolay
26.04.2017
20:10:29
type Reply = | InlineKeyboardMarkup of InlineKeyboardMarkup | ReplyKeyboardMarkup of ReplyKeyboardMarkup | ReplyKeyboardRemove of ReplyKeyboardRemove | ForceReply of ForceReply

Google
Nikolay
26.04.2017
20:10:31
Такой?

Vasily
26.04.2017
20:11:53
socketServer.MessageReceived.Add(fun message -> sprintf "%s\r\n%s" historyText message |> fun msg -> base.SetField (&historyText, msg, "HistoryText") |> ignore)

В самый низ

Base не нужен

Хотя можно просто base выкинуть

Там можно и рекорды пихать и что угодно

Nikolay
26.04.2017
20:13:32
Блин, опять некрасиво получается

Vasily
26.04.2017
20:13:49
Что хочешь сделать-то?

Летучая
26.04.2017
20:13:58
В самый низ
Всё равно с той же ошибкой ругается

Vasily
26.04.2017
20:14:12
base e,thb

убери

Nikolay
26.04.2017
20:14:53
Что хочешь сделать-то?
Хочу сделать интерфейс для записей)

Летучая
26.04.2017
20:14:55
не влияет аще

Nikolay
26.04.2017
20:15:11
Ну либо возможность передавать записи разных типов в один аргумент

Пойду гуглить короче

Vasily
26.04.2017
20:15:38
&historyText - это шо,

?

Зачем тебе там byref?

Летучая
26.04.2017
20:17:02
Зачем тебе там byref?
type ViewModelBase () = let propertyChanged = Event<_, _>() member internal this.OnPropertyChanged (propertyName: string) = (this, PropertyChangedEventArgs propertyName) |> propertyChanged.Trigger member internal this.SetField<'T> (property: byref<'T>, value: 'T, name: string) = property <- value this.OnPropertyChanged name interface INotifyPropertyChanged with [<CLIEvent>] member this.PropertyChanged = propertyChanged.Publish лаконичный SetField от ViewModelBase

Google
Vasily
26.04.2017
20:17:29
Ща

Evgeniy
26.04.2017
20:18:03
@Fuyfuy Привет!

Летучая
26.04.2017
20:18:05
Кароч чот не хочет он давать доступ к пропертям в конструкторе

Ща ещё погуголю

Vasily
26.04.2017
20:18:28
ПОлный код бы

Alexander
26.04.2017
20:18:51
@gsomix привет!

Vasily
26.04.2017
20:19:02
С определением SocketServer и FuncCommand

Летучая
26.04.2017
20:19:48


Он не может перезаписать мьютабл переменную в конструкторе даже (та же ошибка)

Мб я косолапый

Vasily
26.04.2017
20:20:25
МИнуту

Evgeniy
26.04.2017
20:20:34
@Worldbeater https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/constructors

> Self Identifiers in Constructors

Vasily
26.04.2017
20:21:13
type Test() = let mutable field ="" do field<-"111"

Evgeniy
26.04.2017
20:21:24
@Worldbeater Да, и про do там тоже почитай.

Vasily
26.04.2017
20:21:43
Ну или as this, конечно

Летучая
26.04.2017
20:23:21
https://gist.github.com/Worldbeater/b950feadec18c762e680d24256b1a343 остановился на таком в общем. спасибо посоны ??

Google
Vasily
26.04.2017
20:25:41
Сам ты посон

Я посоном лет 20 назад был :)

Летучая
26.04.2017
20:36:12
Ой, у меня ещё вопрос, возможно тупой. Есть строка X. С ней надо сделать 2 или более операции (и игнорировать возвращаемые результаты). Есть ли для таких целей сахар по типу пайпов? Типа: "myString" => LogHere => LogThere

Evgeniy
26.04.2017
20:39:42
@danslapman Привет!

Daniel
26.04.2017
20:39:54
Привет!

Летучая
26.04.2017
20:40:03
Привет!

Vasily
26.04.2017
20:40:07
[f1;f2]|>Seq.iter (fun x-> x s)

Evgeniy
26.04.2017
20:41:50
@Worldbeater Выше еще советовали ввести функцию tee. let inline tee fn x = x |> fn |> ignore; x

Летучая
26.04.2017
20:42:34
Спасибо!!

Nikolay
26.04.2017
21:03:32
Выложил своё позорище на гитхаб

https://github.com/Dolfik1/Funogram

Roman
26.04.2017
21:04:45
https://github.com/Dolfik1/Funogram
Ура! Есть куда отправлять пуллреквесты

Nikolay
26.04.2017
21:04:55
Но оно ещё не работает, наверное, не тестил

Roman
26.04.2017
21:06:13
@danslapman @Fuyfuy привет! Расскажите о себе?) есть опыт с f#?

Daniel
26.04.2017
21:10:07
ну что рассказать, около 5 лет писал на .NET, пару лет назад ушёл в Scala (этот чат упоминали в скалачате), F# использую до сих пор для скриптов (не перевариваю питон и всё прочее динамически типизированное) В бытность дотнетчика запиливал (от отчаяния) PatternMatching на деревьях выражений для C# https://github.com/danslapman/PatternMatching

Страница 79 из 772