@Fsharp_chat

Страница 334 из 772
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
А второе в каком контексте?
let func = Func<_>(fun () -> 42) - это мы вывод типов отдаем компилятору?

Google
Evgeniy
29.09.2017
13:47:41
let func = Func<_>(fun () -> 42) - это мы вывод типов отдаем компилятору?
Да, в некоторых случаях можно не указывать дженерик параметр.

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

В случае конструктора/функции я имею в виду

Vlad
29.09.2017
13:55:13
#имя_типа https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/flexible-types
они про контрвариантность? если я правильно понял

Friedrich
29.09.2017
14:32:52
Иногда можно и <_> опустить, вроде (не знаю, можно ли в случае Func).
Моя интуиция говорит, что его можно опускать всегда, кроме - определений generic-функций (и то не всегда) - конструкторов делегатов

Friedrich
29.09.2017
14:48:48
откуда такая инфа?)
Из corefxlab. Пакет сейчас называется System.Text.Primitives.

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

Pawel
29.09.2017
15:01:28
Это не значит, что у тебя все строковые литералы по умолчанию станут UTF-8, но, сам понимаешь, если эта штука станет достаточно первоклассной, можно будет много наоптимизировать ей.
согласно бенчмаркам для типичных задач по перекладыванию хмл в жсон - раза эдак в полтора быстрее быстрее при переходе с UTF16 на UTF8

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

Google
Pawel
29.09.2017
15:02:59
Java живёт же как-то.
джаве в своё время простили всё за освобождение от С++. utf16 - это ещё мелочи

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

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
20:14:47
Ищи rop на fffap
как мне сие понимать?)

Roman
29.09.2017
20:18:02
как мне сие понимать?)
RailwayOrientedProgramming на FsharpForFunAndPrifit

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
Немного оффтопа про имплиситы в OCaml, довольно интересно. http://tycon.github.io/modular-implicits.html
окамл излишне многословен что-то для ml языка, reasonML как-то в компактнее кажется

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

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
let struct (a, b) = t
Не компилируется!

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
Ведь вызов с одним аргументом корректен для обеих функций

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
А почему в F# нет перегрузок функций?
потому что перегрузки функций - это один из самых тяжких грехов

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 поменялсь и с вальютуплями какая-то ересь началась

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

Evgeniy
30.09.2017
16:48:21
А так нельзя разве: let a, b = service...
Должно быть можно. Почему нет?

Nikolay
30.09.2017
16:48:39
Я просто хз что за struct

let _, b = service.GetAsync() |> await let feed = b |> List.ofSeq

Летучая
30.09.2017
16:49:18
Напиши fst и snd для struct кортежей.
Да, хорошее решение. Правда неясно, почему этого нет в стандартной библиотеке

Evgeniy
30.09.2017
16:49:55
Да, хорошее решение. Правда неясно, почему этого нет в стандартной библиотеке
Мы только вчера-сегодня этот вопрос обсуждали с @fvnever.

Я хочу написать предложение, но еще не продумал полностью.

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

Evgeniy
30.09.2017
16:51:40
А там два варианта.

Или добавить новые функции для struct tuple. Какие названия?

Или нужен какой-то полиморфизм организовать для struct/не-struct.

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