
Александр
18.10.2018
00:21:50
Это значит, что после компиляции фшарпа мы по сути получаем ооп код)

Grigoriy
18.10.2018
00:21:51
Ребзя, ну хоть целиком сообщение читайте!
Я не про класс, а про сигнатуру метода!

Александр
18.10.2018
00:23:40
А я не на этот вопрос ответил, просто поддержал тему про естественность ооп в фшарпе

Google

Александр
18.10.2018
00:24:05
Когда-то это ломало мозг
Ведь по сути вся это функциональность под капотом объектно-ориентированная

Grigoriy
18.10.2018
00:31:21
Всё машинные коды
По сути
Электроны в пнп переходах

Александр
18.10.2018
03:01:02
Ну тоже верно

Friedrich
18.10.2018
05:27:19


Grigoriy
18.10.2018
05:34:29

Friedrich
18.10.2018
05:35:07
Ну, типа, чтобы компилятор, увидев Option, который передают в метод со значениями по умолчанию, городил там конструкцию а-ля
MethodCall(match o with
| Some x -> x
| None -> implicit_default_value)

Google

Friedrich
18.10.2018
05:36:36
Если кому шибко охота — давайте поищем или напишем пропозал.
Я просто не припомню, чтобы мне часто приходилось использовать такие конструкции, но, может, у других людей другой опыт.

Grigoriy
18.10.2018
05:42:16
Пропооозалы. Я тут всё собираюсь пр на сейф темплейт. То, что там сейчас оно, конечно компилится как-то, но если попытаться, что-нить сложнее инта погонять между клиентом и сервером - кмк всё сломается. Просто я по этим граблям уже недели две назад ходил...
А ты - пропозалы в компилятор
Напиши им - раз компилер сервис говорит стринг опшонал - извольте принять!

Roman
18.10.2018
06:00:51

Friedrich
18.10.2018
06:01:04

Roman
18.10.2018
06:01:50

Ayrat
18.10.2018
06:01:53
Мы как раз во флудилке обсуждаем фантомас
и что он в райдер оказывается встроен

Friedrich
18.10.2018
06:02:00

Ayrat
18.10.2018
06:02:14
А я вот не замечал что автоформат есть в райдере

Roman
18.10.2018
06:03:55
Я понял.
Ты даже в readme.md немного поконтрибутил) ?

Friedrich
18.10.2018
06:05:54
@grishace @gsomix говорит, что ты всё делаешь неправильно.
И я тоже неправ.
Смотри: твои default-аргументы из C# будет передавать очень неудобно
Потому что для C# твои ?opt: string будут выглядеть как Option<string>
Зато я немного пошукал в багтрекере и понял, как делать настоящие дефолтные аргументы так, чтобы C# их понимал.

Ayrat
18.10.2018
06:07:21
О, кстати, а есть возможность их сделать нормальными? Мне тоже надо немного надо

Google

Friedrich
18.10.2018
06:07:30
Встречайте моё безумное творение:
open System.Runtime.InteropServices
type C() =
member this.M([<Optional;DefaultParameterValue(0)>] i : int) = ()

Grigoriy
18.10.2018
06:07:36
Так почему они для самого ф# не такие!?

Ayrat
18.10.2018
06:07:42
эх.
не надо тут
Там же больше возможностей

Friedrich
18.10.2018
06:08:37

Ayrat
18.10.2018
06:08:39
можно как передавать T, который будет оборачиваться в Option<T>, так и Option<T> который НЕ БУДЕТ оборачиваться в ещё один Option!

Grigoriy
18.10.2018
06:08:40
Почему я сразу стринг опшонал не могу передать?

Ayrat
18.10.2018
06:08:46

Friedrich
18.10.2018
06:08:50

Ayrat
18.10.2018
06:08:52
передавай через ?

Grigoriy
18.10.2018
06:09:17

Ayrat
18.10.2018
06:09:24
ща накидаю

Grigoriy
18.10.2018
06:10:19
Через тернарный оператор? :)))))

Ayrat
18.10.2018
06:10:42
это не очень известная фича, но полезно читать спеку
можно в ВЫЗОВ метода аргументы с префиксным ? передавать

Grigoriy
18.10.2018
06:11:12
Когда? Надо говнокодить!

Ayrat
18.10.2018
06:11:24
чтобы явно указывать что для этого опшнал аргумента заворачивать твой опшн в ещё один опшн не надо
магия!

Google

Grigoriy
18.10.2018
06:12:02
Сигнатура про второй опшонал молчит как рыба об лёд
Откуда обёртка?

Friedrich
18.10.2018
06:12:32
Это ж не сигнатура, а синтаксис такой.

Grigoriy
18.10.2018
06:12:46
Ооооокееейййй

Friedrich
18.10.2018
06:13:24
Айрат, у меня не получается вызвать со знаком вопроса: https://sharplab.io/#v2:DYLgZgzgPg9gDgUwHYAIDKBPCAXBBbAWACh5l0tc8A6AJQFclsBLPBKgSUYQCd40eAbkwDGCCMWLYMiFAGEAFAEoUAXmIoNKVngBGPFNgAWTCFQCy8gPxMUIFE0bKVKJes3a93A8dMAxJapumijACNgoAB6q6DCsKACMAAxBmkYm5lYRisRAA===

Grigoriy
18.10.2018
06:16:24
let g = Some x :))) @gsomix

Ayrat
18.10.2018
06:16:50
Айрат, у меня не получается вызвать со знаком вопроса: https://sharplab.io/#v2:DYLgZgzgPg9gDgUwHYAIDKBPCAXBBbAWACh5l0tc8A6AJQFclsBLPBKgSUYQCd40eAbkwDGCCMWLYMiFAGEAFAEoUAXmIoNKVngBGPFNgAWTCFQCy8gPxMUIFE0bKVKJes3a93A8dMAxJapumijACNgoAB6q6DCsKACMAAxBmkYm5lYRisRAA===
type Test() =
member __.Opt(a,?b)= printfn "%A, %A" a b
let t = Test()
t.Opt(1,2) // prints "1, Some 2"
t.Opt(1, Some 2) // prints "1, Some (Some 2)""
t.Opt(1, b = Some 2) // prints "1, Some (Some 2)""
t.Opt(1, ?b = Some 2) // prints "1, Some 2""
Я сделаль

Friedrich
18.10.2018
06:17:07
._
Как это работает!

Ayrat
18.10.2018
06:17:25
Это вот так!
круто же

Friedrich
18.10.2018
06:17:51
Ага, окей, то есть опшен туда можно передавать только именованным аргументом!

Grigoriy
18.10.2018
06:17:56
т.е. если он опционально-име..

Friedrich
18.10.2018
06:18:01
@grishace вот так у меня скомпилилось:
member this.M(?i : int) = ()
member this.F() =
let x = Some 10
this.M(?i = x)

Ayrat
18.10.2018
06:18:08

Friedrich
18.10.2018
06:18:12
У Айрата ещё более интересный кейс описан, потому что с генериком
type Test() =
member __.Opt(a,?b)= printfn "%A, %A" a b
let t = Test()
t.Opt(1,2) // prints "1, Some 2"
t.Opt(1, Some 2) // prints "1, Some (Some 2)""
t.Opt(1, b = Some 2) // prints "1, Some (Some 2)""
t.Opt(1, ?b = Some 2) // prints "1, Some 2""
Спасибо!

Grigoriy
18.10.2018
06:18:30
Ля, Фридрихъ! Не успеваю на телефоне набирать, а ты уже
Спасибище!

Google

Friedrich
18.10.2018
06:19:05

Vasily
18.10.2018
06:19:41
Умные мысли тяжело выразить словами

Grigoriy
18.10.2018
06:20:00
Тут стикеры запрещены :)

Valera
18.10.2018
08:43:16
Подскажите адрес флудилки

Anna
18.10.2018
08:44:58

Igor
18.10.2018
09:03:42
Ребят, может я упустил, но никто же не переводил?
http://blog.ploeh.dk/2017/08/07/f-free-monad-recipe/

Roman
18.10.2018
09:32:42
Issue на гитхабе заведи)

Ayrat
18.10.2018
09:48:24
не компилятор, а Ionide конечно же

Roman
18.10.2018
09:51:33
А весь код?

Ayrat
18.10.2018
09:51:34
т.е. для него
fun x -> (fun y -> x y) === id
я чот не понял
это весь код

Roman
18.10.2018
09:52:31
Да, странно

Ilya
18.10.2018
09:54:58
Ну у тебя тут функция, которая принимает функцию. Если id передать тоже функцию, то будет тот же результат

Ayrat
18.10.2018
09:55:15
но у меня два разных параметра
А id умеет работать только так: 'a -> 'a

Ilya
18.10.2018
09:56:26
ну, а если 'a === ('a -> 'b), то получается то же самое

Ayrat
18.10.2018
09:56:45
а если нет?