
Astmatik
13.09.2017
15:31:13
я предполагал, что type matching распространяется на этот случай
ну да, полиморфно
в C# такое сработало бы через интерфейс

Evgeniy
13.09.2017
15:33:57

Google

Klei
13.09.2017
15:35:23

Летучая
13.09.2017
15:36:02

Klei
13.09.2017
15:39:49

Vasily
13.09.2017
15:40:16
member constraints вообще позволяют прикольный duck typing

Klei
13.09.2017
15:41:55
Хотя относится ли это к инлайну, не уверен. Мне надо разграничить термины.

Evgeniy
13.09.2017
15:47:06

Vasily
13.09.2017
15:47:42
Придется, но можно отказаться от концепции интерфейсов

Летучая
13.09.2017
15:48:39
А, понятно. Та самая прекрасная type Sample<'T when 'T : (member A : int)> =!

Vasily
13.09.2017
15:48:57
Угу

Летучая
13.09.2017
15:49:09
Очень круто, и интерфейсы не угнетают.

Klei
13.09.2017
15:50:06
Если выделить гетер id в отдельный метод, то в принципе будет серьёзная экономия. Главное не злоупотреблять.

Снежный
13.09.2017
16:00:53
Привет. Продолжаю изыскания по F#. Такой вопрос:
Как объявить поле в классе, типа интерфейс? но без создания объекта?

Google

Снежный
13.09.2017
16:00:59
type IServiceCallback=
[<OperationContract(IsOneWay = true)>]
abstract member OnServiceEvent: svcPacket : SvcPacket -> unit
type ServiceCallback() =
interface IServiceCallback with
member this.OnServiceEvent(svcPacket)=
Console.WriteLine("packet")
()
type Service() =
let mutable _callback: IServiceCallback = ;
let doSomething() =
_callback <- new ServiceCallback()
()
let mutable _callback: IServiceCallback = ; проблема тут
причем, если интерфейс объявить как
public interface IServiceCallback
{
[OperationContract(IsOneWay = true)]
void OnServiceEvent(SvcPacket svcPacket);
}
то всё прекрасно работает
let mutable _callback: IServiceCallback = null;

Vasily
13.09.2017
16:04:39
Не стоит пытаться программировать на f# в оо стиле

Снежный
13.09.2017
16:12:46
понимаю, но хочется WCF реализовать полностью на F#

Klei
13.09.2017
16:15:50

Vasily
13.09.2017
16:15:55
Особого профита не будет
Будет эдакий c# код в синтаксисе f#

Летучая
13.09.2017
16:17:16
member x.OnServiceEvent (packet: SvcPacket) =
вроде так, если ничо не путаю

Vasily
13.09.2017
16:18:15
Только что синтаксис немного выучишь

Снежный
13.09.2017
16:18:47
в методе doSomething, не находит проперти

Летучая
13.09.2017
16:19:07
Только что синтаксис немного выучишь
Ну, в некоторых случаях это может быть вынужденной необходимостью. Например, использовать C# фреймворки из F# кода (хотя для большинства случаев есть аналоги)

Vasily
13.09.2017
16:19:23
Опять же, неясно,как DataContractSerializer обходится,с опшнами,например
Подозреваю,что никак

Снежный
13.09.2017
16:19:38
понимаю, просто не хочется венигрет делать из моделей F# и C#

Летучая
13.09.2017
16:20:30

Vasily
13.09.2017
16:20:34
А ты сделай провайдера с обвязкой на c#,а на f# всю доменную логику

Google

Снежный
13.09.2017
16:21:28

Klei
13.09.2017
16:21:48
Будет эдакий c# код в синтаксисе f#
Мне один необращенный жаловался, что f#исты мешают переходу постоянно критикуя за ооп артефакты. Мол дали бы перенести любимые игрушки, давно бы среди нас был. Так что лучше решить проблему без претензий к осмысленности.

Летучая
13.09.2017
16:21:50

Снежный
13.09.2017
16:22:01

Vasily
13.09.2017
16:22:28
Зато практично
Сейчас скорее всего получится какая-нить странная кодовая база,в которую будет тяжело вносить изменения

Снежный
13.09.2017
16:57:48
Крутяк, работает. Получилось избавится от C# моделей.
да, кстати к интерфейсу надо ещё аттрибут приписать [<AllowNullLiteral>], может кому-нибуть поможет :)

Летучая
13.09.2017
17:02:36
в F# _очень_ не любят null и связанные с ним Exception (да и Exception вообще)

Снежный
13.09.2017
17:03:58
ну, в данном случае даже не знаю как обойтись без этого.

Летучая
13.09.2017
17:04:47

Снежный
13.09.2017
17:05:01
null присваиваю
переписывал C# код
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class_UrlCheckerService : IUrlCheckerService, IHandle<JobArgs>
{
private IServiceCallback _callback;
}
public bool Subscribe()
{
_callback = OperationContext.Current.GetCallbackChannel<IServiceCallback?);
и тд...

Astmatik
13.09.2017
20:10:04
но я не понимаю этот дикий синтаксис )
let something' = (^a: (member Id: string) (something))

Google

Летучая
13.09.2017
20:24:01

Astmatik
13.09.2017
20:35:52
This code is not sufficiently generic. The type variable ^a when ^a : (member get_Id : ^a -> string) could not be generalized because it would escape its scope.

Летучая
13.09.2017
20:55:54
Если нужно просто получить id (и сделать функцию, принимающую объекты, у которых есть Id), достаточно такого:
let inline log instance =
let id = (^a: (member Id: int) instance)
()

Astmatik
13.09.2017
21:17:18
прикольно, получается, что ^a нигде не используется
больше похоже на шаблоны в C++, чем на дженерики

Friedrich
14.09.2017
04:21:44
У меня есть небольшой опыт броьбы с WCF-специфичными проблемами на F#; меня можно спрашивать.

Evgeniy
14.09.2017
05:03:37

Снежный
14.09.2017
05:51:34

Evgeniy
14.09.2017
06:16:00
Хей?
Пожалуйте.

Sherzod
14.09.2017
06:20:09

Roman
14.09.2017
06:34:17

Evgeniy
14.09.2017
06:54:47
Мне нравится, как Сайм вместо ООП говорит "object programming". С акцентом на использование параметризуемых объектов и интерфейсов, но без создания больших иерархий.
Это идиоматичный способ организации кода в F#.
> Got something to share with the #FSharp community? Say it at #FSharpX 2018!
А я еще не все видео с FSharpX 2017 посмотрел.

Google

Roman
14.09.2017
07:20:35

Anton
14.09.2017
08:34:14
а можно как-то объявить массив флоатов/даблов не преписывая к каждому числу .0 ?
let array:float = [|1;2;3|] - типо вот так, и что бы оно само потом .0 поставило

Igor
14.09.2017
08:35:08
Можешь только . добавлять ?

Anton
14.09.2017
08:35:50
чот не удобная система

Igor
14.09.2017
08:37:04
Философия такая.
Типы не надо писать - они выводятся, но никаких имплисит кастов.

Anton
14.09.2017
08:38:19
немного хочется тогда имплисита =)

Evgeniy
14.09.2017
08:39:53

Anton
14.09.2017
08:43:47
нууу, когда я копирую уже готовый массив данных на 64 элемента, мне достаточно муторно везде точки ставить.

Evgeniy
14.09.2017
08:43:57

Anton
14.09.2017
08:47:26
@gsomix смотри, у меня есть x и y векторы. Как мне их отрисовать в F# ?
это к той задаче по сжатию.

Evgeniy
14.09.2017
08:49:09