Александр
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
а если нет?