@Fsharp_chat

Страница 549 из 772
Evgeniy
11.04.2018
12:14:23
Ты в Some получаешь ровно то, что туда заворачиваешь.

Грубо говоря, pattern matching работает в очень неожиданных местах. :)

?‍?
11.04.2018
12:21:23
Грубо говоря, pattern matching работает в очень неожиданных местах. :)
Так у вас в коде матчится | Sample _ -> "x = 0" а у меня | Sample -> "x = 0" , то есть без лишнего параметра "_"

Google
?‍?
11.04.2018
12:22:57
Ты в Some получаешь ровно то, что туда заворачиваешь.
В том и дело, что мне нужно отбросить значение для более красивого матча без лишнего параметра, но в C# это выглядит странно.

Evgeniy
11.04.2018
12:23:04
Ну, тогда хотя бы сделай аккуратно. let inline (|Sample|_|) a = a = 0 |> f ()

?‍?
11.04.2018
12:24:03
Ну, тогда хотя бы сделай аккуратно. let inline (|Sample|_|) a = a = 0 |> f ()
Хмм, о () не подумал, спс. Ещё может показаться, что это императивный опыт, но как раз из-за того, что тут нету void, а вместо него (), ещё не привык к void-конструкциям на F#.

Evgeniy
11.04.2018
12:24:22
Ну, тогда хотя бы сделай аккуратно. let inline (|Sample|_|) a = a = 0 |> f ()
Но я считаю, что это плохой шаблон, конечно.

?‍?
11.04.2018
12:24:47
Evgeniy
11.04.2018
12:25:28
А какой должен быть?
Который, например, возвращает само значение.

?‍?
11.04.2018
12:25:33
Просто делать через when не хочется совсем, а так аналог литералов.

Который, например, возвращает само значение.
Тут место, где обязана быть наглядность и такие шаблоны позволяют её соблюдать, еще раз спасибо. В нескоторых шаблонах доп логика типа проверок четностей и проч. Очень удобно, читабельно выглядит.

Pavel
11.04.2018
12:33:24
Эм? Мне нужно вернуть, например, конструктор.
let inline (|Sample|_|) x = if x = 0 then Some (fun (e : char[]) -> System.String e) else None let foo x = match x with | Sample f -> f [|'a'..'f'|] | _ -> "non-zero"так?

Evgeniy
11.04.2018
12:56:00
как пример нечитаемого пайпа тоже сойдет
Это уже не так интересно, конечно. :)

Google
?‍?
11.04.2018
12:56:18
как пример нечитаемого пайпа тоже сойдет
А где посмотреть ещё такого?

Friedrich
11.04.2018
13:04:49
Ну, тогда хотя бы сделай аккуратно. let inline (|Sample|_|) a = a = 0 |> f ()
Мы многого пока про этот пример не понимаем

В частности, у меня скомпилировалось такое: let (|Sample1|_|) a = printf "%A" (Sample1(Sample1("Unit"))) if a = 0 then Some a else None WTF?

Вроде как сам по себе Sample1 имеет тип unit (сужу по декомпилированному коду), но при этом он ещё и является функцией, которая работает так же, как id.

Evgeniy
11.04.2018
13:09:43
?

Friedrich
11.04.2018
13:12:02
open System let ptype<'a> (x: 'a) = printfn "%A" (typeof<'a>) [<EntryPoint>] let main _ = let (|Sample1|_|) a = let foo = Sample1 let foo2 x = Sample1 x // смотреть сюда ptype Sample1 // Unit ptype (Sample1 Sample1) // Unit ptype foo // Unit ptype foo2 // FSharpFunc`2[System.Object,System.Object] printfn "%A" (Sample1 Sample1) if a = 0 then Some a else None match 10 with | Sample1 a -> printfn "matched %A" a | _ -> printfn "not matched" 0

Поразительно.

В декомпиле видно, что foo2 действительно работает как id.

?‍?
11.04.2018
13:13:33
Friedrich
11.04.2018
13:14:00
Что матчилось? Я так и не понял, что же такое этот Sample1 внутри тела функции (|Sample1|_|).

?‍?
11.04.2018
13:40:47
Что матчилось? Я так и не понял, что же такое этот Sample1 внутри тела функции (|Sample1|_|).
Ну это не просто функция же, а шаблон, где Sample1 может быть использован как результат матчинга (как id) Sample1 это int -> int option

В смысле unit -> unit option

Evgeniy
11.04.2018
13:49:06
В смысле unit -> unit option
Так у @fvnever int -> int option как раз.

?‍?
11.04.2018
13:59:03
^ @fvnever > что же такое этот Sample1 С соседнего чата. Ну вот Sample1 выполняет функцию (то есть является функцией) распознавания значения. Внутри себя он не будет работать как распознаватель, если не сделать его рекурсивным: let rec (|Sample1|_|) a = match 10 with | Sample1 a -> printfn "matched %A" a | _ -> printfn "not matched"

Evgeniy
11.04.2018
14:08:25
https://twitter.com/gsomix/status/984069500789252096

Подождем. :)

С обычными активными шаблонами такой фокус не проходит.

Google
Vlad
11.04.2018
14:12:21
https://twitter.com/gsomix/status/984069500789252096
а можно tldr происходящего?

Evgeniy
11.04.2018
14:12:55
а можно tldr происходящего?
Ну, в частичном активном шаблоне можно обращаться к чему-то с таким же именем. Без rec.

Friedrich
11.04.2018
14:13:52
а можно tldr происходящего?
Пока сами не поняли, что творится. Я по дефолту считаю, что это компиляторный баг (однако, я по дефолту неправ).

Evgeniy
11.04.2018
14:15:03
наркомания, но интересно
Поэтому я написал @pezi_pink в твите, он знатный наркомант!

Evgeniy
11.04.2018
14:24:51
Они же не оптион
А какая разница? Ну, они Choice.

?‍?
11.04.2018
14:25:41
А какая разница? Ну, они Choice.
Я так понимаю там ещё одна обёртка у неполного

let inline (|Sample|_|) x = if x = 0 then Some (fun (e : char[]) -> System.String e) else None let foo x = match x with | Sample f -> f [|'a'..'f'|] | _ -> "non-zero"так?
Ага, такие полезности, но пока ждём результатов о том, что можно выжимать из шаблонов. Кажется натыкался на передачу шаблона параметром, но это могло и привидиться.

Evgeniy
11.04.2018
14:38:36
Шаблоны передавать можно, это просто функции же.

?‍?
11.04.2018
14:43:13
Шаблоны передавать можно, это просто функции же.
Конечно. Ну там шаблон, принимающий шаблон в качестве параметра, и инициализация шаблона там же, я оч быстро прокрутил, чтобы развидеть.

Мне пока рано смотреть на плохое исполнение, потому и лезу сюда в поисках истины.

Evgeniy
11.04.2018
14:49:04
https://zaid-ajaj.github.io/Fable.React.Flatpickr/

https://twitter.com/zaid_ajaj/status/984024388084404225

?‍?
11.04.2018
14:51:48
Я пока не хочу придумывать пример, где нужно через шаблон возращать шаблон, кроме обработки голов списка таким образом.

Klei
11.04.2018
14:54:16
Я пока не хочу придумывать пример, где нужно через шаблон возращать шаблон, кроме обработки голов списка таким образом.
По моему шаблон - это фишка чисто для людей, если ты начинаешь играть в "полиморфизм", ты теряешь семантику, и непонятно то зачем тебе вообще шаблоны?

?‍?
11.04.2018
14:59:08
По моему шаблон - это фишка чисто для людей, если ты начинаешь играть в "полиморфизм", ты теряешь семантику, и непонятно то зачем тебе вообще шаблоны?
Мне то как раз понятно зачем: не писать в матчах кучи when, причем часто их повторяя. А что под полиморфизмом в кавычках вы имеете в виду?

Klei
11.04.2018
15:05:28
Мне то как раз понятно зачем: не писать в матчах кучи when, причем часто их повторяя. А что под полиморфизмом в кавычках вы имеете в виду?
Имел ввиду, что если шаблон в результате возвращает другой шаблон, то возвращенный шаблон будет выглядеть как обычная функция. Если нет разницы, как эта функция называется, и мы ей оперируем без знания о ней, то зачем здесь шаблон?

Но судя по всему я не понял, что имелось ввиду в https://t.me/Fsharp_chat/54854.

Evgeniy
11.04.2018
15:46:21
Привет.

Google
Evgeniy
11.04.2018
16:58:53
https://twitter.com/pezi_pink/status/984100809981026304

Сложно

Friedrich
11.04.2018
17:00:13
Хм, то есть он полагает, что тут смешались частичные и полные шаблоны?

Evgeniy
11.04.2018
17:14:45
> cartermp [8:42 PM] > I’m now writing an F# coding idioms/best practices article in our docs based on long conversations with Eirik

Воу!

?‍?
11.04.2018
19:27:33
https://blogs.msdn.microsoft.com/dotnet/2018/04/11/announcing-net-core-2-1-preview-2/

?‍?
11.04.2018
19:30:26
А вот тут будет кто из участников чата? http://fsharpconf.com/

Evgeniy
11.04.2018
19:33:39
А вот тут будет кто из участников чата? http://fsharpconf.com/
Это онлайн конференция, среди докладчиков знакомых из чата не вижу.

Привет.

Денис
12.04.2018
10:40:33
А есть для FSI какой нибудь способ досрочно прервать выполнение скрипта? Типа return или Environment.Exit()

Roman
12.04.2018
10:43:42


Alexey
12.04.2018
10:43:45
В vs : ctrl+break

Через контекстное меню тоже доступно

Evgeniy
12.04.2018
10:44:27
https://github.com/fsharp/fslang-suggestions/issues/567

Igor
12.04.2018
10:45:11
потому что компилятор начинает считать, что 'T - int

Igor
12.04.2018
10:45:54
может лучше пользоваться obj -> int

Roman
12.04.2018
10:46:03
может лучше пользоваться obj -> int
зачем нам типизация тогда?)

Google
Igor
12.04.2018
10:48:10
так она же и играет злую шутку из-за этого))

Roman
12.04.2018
10:48:20
Там не в типизации проблема

там явно указан тип 'T

И на него можно повесить констреийнты и все такое

но кмпилятор брет первое ипользовние и говорит, что теперь 'T это инт и больше никак. Хотя ф-ция готова принять и строку

и вот это не оч

Vasily
12.04.2018
10:51:52
там явно указан тип 'T
Не указан тип в объявлении функции

Evgeniy
12.04.2018
10:52:29
@neftedollar Я же тебе скинул ссылку. Там описано, как это сделать, и почему это не реализовано.

Vasily
12.04.2018
10:52:36
Поэтому компилятор подставит первый выведенный

Инлайны решают часть проблем

Roman
12.04.2018
10:53:08
@neftedollar Я же тебе скинул ссылку. Там описано, как это сделать, и почему это не реализовано.
я понимаю, еще не дошел до почему, пока только про как в итоге сделать, про f1 f2 и все такое

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