
Vlad
29.09.2017
13:40:25
я еще на самом деле не знаю, что #имя_типа значит и Func<_>, сегодня наткнулся случайно

Evgeniy
29.09.2017
13:41:56
#имя_типа
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/flexible-types

Vlad
29.09.2017
13:47:02

Google

Evgeniy
29.09.2017
13:47:41

Artemy
29.09.2017
13:53:06
Иногда можно и <_> опустить, вроде (не знаю, можно ли в случае Func).
В случае конструктора/функции я имею в виду

Vlad
29.09.2017
13:55:13

Friedrich
29.09.2017
14:32:52

Pawel
29.09.2017
14:47:58

Friedrich
29.09.2017
14:48:48
Это не значит, что у тебя все строковые литералы по умолчанию станут UTF-8, но, сам понимаешь, если эта штука станет достаточно первоклассной, можно будет много наоптимизировать ей.

Pawel
29.09.2017
15:01:28

Friedrich
29.09.2017
15:01:46
Не сомневаюсь.

Google

Pawel
29.09.2017
15:02:59

Dmitry
29.09.2017
17:06:47
Нужен совет по концептуальному вопросу:
Для работы консольной проги мне нужно получить некоторые данные из консоли, это примерно 5-10 чтений разных данных, которые парсятся в опциональные типы. Потом из этих отдельных штук надо собрать финальное состояние "мира" с которым работать дальше.
Получается или triangle of doom вложенных паттернов или ифов, или же надо как-то частично заполненный стейт передавать в функцию, которая читает следующие данные (для композиции этого всего в Railway-oriented-вид)

Evgeniy
29.09.2017
18:04:50

Aleksey
29.09.2017
18:24:00
В хаскеле есть монадка для этого :)
Неужели нет оператора, который такое чейнит?

Pavel
29.09.2017
18:26:31

Aleksey
29.09.2017
18:27:34
В хаскеле то? Maybe :)
do
x <- smthFailable
y <- smthFailable2
doSomeFailableWith x y
типа такого

Pavel
29.09.2017
18:29:26
А, я думаю тут это не совсем подойдёт
В f# из коробки нет, но можно легко написать простой билдер

Aleksey
29.09.2017
18:30:25
Есть ещё стрелка Клейсли
>=> - композит две функции, которые возвращают опшнл, в одну, которая вернёт опшнл

Pavel
29.09.2017
18:34:38
Ну вот мне кажется комбинация функций через оператор клейсли здесь подойдёт лучше

Evgeniy
29.09.2017
19:05:17
https://twitter.com/kot_2010/status/913815661247385600
Василия, кажется, заставляют на Fable что-то писать.

Dmitry
29.09.2017
19:11:41

Pawel
29.09.2017
19:23:19

Roman
29.09.2017
20:12:18

Pawel
29.09.2017
20:14:47

Roman
29.09.2017
20:18:02

Google

Летучая
29.09.2017
20:18:24
Найс сократил

Roman
29.09.2017
20:18:35
Удобно же.
А как ещё сократить?)

Pawel
29.09.2017
20:25:03
чтобы понели с первого раза тока Избранные)
не, я курсе про такую технику программирования. Даже знаю какие профиты она может давать
просто задача слишком абстрактно сформулирована
думаю было бы хорошо, если бы вопрошающий уточнил предметную область
тогда было бы понятно, какая абстракция лучше подходит для решения задачи - конечный автомат или кастомная алгебра
если последнее - то в какой категории эта алгебра будет жить
а rail или не rail way - как-то вторично. это всего лишь шугар над вызовом функций

Evgeniy
30.09.2017
08:04:59
Немного оффтопа про имплиситы в OCaml, довольно интересно.
http://tycon.github.io/modular-implicits.html

Roman
30.09.2017
08:06:15

Roman
30.09.2017
08:09:30
Интересно как такие имплиситы бы выглядели в reasonML

Evgeniy
30.09.2017
08:10:22

Roman
30.09.2017
08:49:19
Так же? :)
https://reasonml.github.io/reason-tools/popup.html#ICBtb2R1bGUgSW50VDEgOiAoVDEgd2l0aCB0eXBlIGEgPSBpbnQpID0gc3RydWN0CiAgICB0eXBlIGEgPSBpbnQKICAgIGxldCB0b19zdHJpbmcgPSBzdHJpbmdfb2ZfaW50CiAgICBsZXQgZWcgPSAwCiAgZW5kCigqIG1vZHVsZSBJbnRUMSA6IHNpZyB0eXBlIGEgPSBpbnQgdmFsIHRvX3N0cmluZyA6IGEgLT4gc3RyaW5nIGVuZCAqKQoKICBtb2R1bGUgQm9vbFQxIDogKFQxIHdpdGggdHlwZSBhID0gYm9vbCkgPSBzdHJ1Y3QKICAgIHR5cGUgYSA9IGJvb2wKICAgIGxldCB0b19zdHJpbmcgPSBzdHJpbmdfb2ZfYm9vbAogICAgbGV0IGVnID0gZmFsc2UKICBlbmQg
ну не совсем.

Evgeniy
30.09.2017
08:50:10
Скобочек поменьше. :)

Roman
30.09.2017
08:51:41
Да. Это важно для языка без скобочек)
ML
let i = (module IntT1: T1)
let b = (module BoolT1: T1)
в
ReasonML
let i: (module T1) = (module IntT1);
let b: (module T1) = (module BoolT1);

Evgeniy
30.09.2017
12:27:31
> k_cieslak
> Fable Conf talks were recorded, not online yet
> no idea about OpenF#
?

Google

Летучая
30.09.2017
15:21:16
Как в F# деконстрактнуть struct tuple?

Evgeniy
30.09.2017
15:22:25
let struct (a, b) = t

Летучая
30.09.2017
15:23:45

Evgeniy
30.09.2017
15:24:03
https://sharplab.io/#v2:DYLgZgzgPsCmAuACJBeRF4CcCuBjJAFAAwA0iRAlALABQcSGO+iBAhmQEYWJrxA=

Летучая
30.09.2017
15:25:10
А почему в F# нет перегрузок функций?
let also f x = f x; x
let also f x y = y |> x |> f; y
Ну неужели неудобно бы было :(

Aleksey
30.09.2017
15:48:06
И какой бы тип был у такой функции?

Admin
ERROR: S client not available

Aleksey
30.09.2017
15:48:19
И самое главное, как узнать, какой из типов взять?

Летучая
30.09.2017
15:48:25

Aleksey
30.09.2017
15:48:40
Ведь вызов с одним аргументом корректен для обеих функций

Летучая
30.09.2017
15:49:05

Aleksey
30.09.2017
15:49:07

Летучая
30.09.2017
15:49:51
Окей, а есть ли какой-нибудь способ загнать в одну функцию N функций и по очереди их выполнить?

Aleksey
30.09.2017
15:50:20
Список функций + свёртка

Pawel
30.09.2017
16:09:57

Nikolay
30.09.2017
16:20:49

Google

Pawel
30.09.2017
16:21:45
в ML - нет конечно

Nikolay
30.09.2017
16:25:56
@worldbeater вот

Aleksey
30.09.2017
16:37:55
Кстати, в Эрланге есть перегрузка по кол-ву аргументов. Но там аность функции - часть её имени, поэтому foo/1 и foo/2 - разные функции :) Даже публичность таких функций может быть разной. Типичное применение - публичная функция, которая под капотом вызывает "себя же", но с дополнительным параметром, скажем, с аккумулятором

Летучая
30.09.2017
16:41:26
В общем интероп из F# с C# это когда ты очень себя не любишь (надо было всю логику на F# писать)

Nikolay
30.09.2017
16:45:23
Assert?

Летучая
30.09.2017
16:45:51
Assert?
Нет, вот этот идиотизм с struct, потом из struct параметр

Nikolay
30.09.2017
16:46:27
Оно кортеж возвращает? Сорян, struct не знаю
?

Летучая
30.09.2017
16:46:42
Раньше там было просто |> await |> List.ofSeq или типа такого, но API поменялсь и с вальютуплями какая-то ересь началась

Evgeniy
30.09.2017
16:47:17

Nikolay
30.09.2017
16:48:03
А так нельзя разве:
let a, b = service...

Evgeniy
30.09.2017
16:48:21

Nikolay
30.09.2017
16:48:39
Я просто хз что за struct
let _, b = service.GetAsync() |> await
let feed = b |> List.ofSeq

Летучая
30.09.2017
16:49:18

Evgeniy
30.09.2017
16:49:55
Я хочу написать предложение, но еще не продумал полностью.

Летучая
30.09.2017
16:51:07
Что там обсуждать, однозначно добавлять надо. Последнее время взрываюсь, как за тесты на F# сажусь; так как API на C# начало пестрить ParamArray и ValueTuple

Evgeniy
30.09.2017
16:51:40
А там два варианта.
Или добавить новые функции для struct tuple. Какие названия?
Или нужен какой-то полиморфизм организовать для struct/не-struct.