@Fsharp_chat

Страница 258 из 772
Friedrich
10.08.2017
12:12:47
О, вроде бы в vcvarsall есть всё нужное.

То есть мне нужно своим юзерам рекомендовать запускать скрипт из Developer Command Prompt.

А на макоси и линуксе после установки Mono и F# все скрипты сами добавляются в PATH?

Anton
10.08.2017
12:18:26
я вроде как руками добавлял.

Google
Anton
10.08.2017
12:18:28
не помню уже

Andrew
10.08.2017
13:34:40
Как в Expecto (и вообще в юнит-тестировании) принято сопоставлять значение с union case? Пример теста: testCase "many 3" <| fun () -> let p = pItemEq 'a' |> many let (Ok (res, pos, _),_) = run p "aaab" res =! ['a';'a';'a'] pos =! 3 Здесь при корректной работе проверяемой библиотеки тестируемый метод должен вернуть union case Ok. Меня смущает: 1. warning Incomplete pattern matches on this expression. 2. если тестируемый метод вернет Result.Error, то сообщение при выполнении теста будет не очень внятное: Microsoft.FSharp.Core.MatchFailureException: The match cases were incomplete Мой вопрос: Как описать этот тест более элегантно, чтобы избежать вышеобозначенных недостатков?

Friedrich
10.08.2017
13:49:29
Присоединяюсь к вопросу, мне тоже интересно.

Vlad
10.08.2017
13:50:45
А можно вообще suppress warning делать как в c#?

Friedrich
10.08.2017
14:00:53
Можно.

#nowarn "9"

Действует на весь файл.

(ну, 9 это был мой код предупреждения, вам-то другой какой-то нужен)

Я, кстати, в итоге запатчил компилятор, чтобы девятый ворнинг делался только когда нужно :P

Pavel
10.08.2017
15:33:58
В expecto я делал матчинг с wildcard и вызовом failwith

Evgeniy
10.08.2017
17:25:57
https://github.com/fsharplang-ru/translations/pull/18#issuecomment-321618640

Aleksander
10.08.2017
17:48:20
https://github.com/fsharplang-ru/translations/pull/18#issuecomment-321618640
Есть места, в которых вылезает английский порядок слов. Например где используются инструкции (statements) практически для всего -> где инструкции (statements) используются практически для всего Ну и в целом, оригинальный текст производит более легкое и "неформальное" впечатление. Я бы прошелся еще по тексту и убрал лишние слова и обороты. Например Перед тем, как мы приступим к изучению -> Перед тем, как приступить к изучению. Но это мое личное впечатление ?

Но такие вещи уже удобнее делать отдельным PRом. И желательно как-то по-очереди ?

Google
Vlad
10.08.2017
17:52:16
Перевод это ужас) особенно если ты ещё и не граммар наци

Aleksander
10.08.2017
17:54:21
Да, переводить сложно. У меня знакомые девочки-переводчицы были, не зря они этому 5 лет учились)

Andrew
10.08.2017
18:15:10
Смотря что переводить, конечно.

Когда предметная область незнакома и лезешь за каждым словом в глоссарий - то да, жесть

Evgeniy
10.08.2017
18:48:03
Хорошо, тогда я смержу PR и буду думать дальше.

Aleksander
10.08.2017
18:54:17
попробовал переписать первый абзац менее формально Ранее, в посте "[Почему вам следует использовать F#][why-you-should-use]", мы рассказали почему F# стоит попробовать прямо сейчас. Теперь мы разберем основы, необходимые для его успешного применения. Пост предназначен для людей, знакомых с C#, Java или другими объектно-ориентированными языкми. Если вы уже пишете на F#, эти понятия должны быть вам хорошо знакомы.

Evgeniy
10.08.2017
18:55:35
https://github.com/fsharp/fssf-ask-the-board/issues/4

Pavel
10.08.2017
19:32:14
https://github.com/fsharp/fssf-ask-the-board/issues/4
Отличная идея! Даже несмотря на то, что есть скала

Roman
10.08.2017
20:35:33
Привет, о начавший третью сотню!

Илья
10.08.2017
20:53:04
https://github.com/fsharplang-ru А где собственно исходники компилятора? Он же опенсорсный написано вроде.

Илья
10.08.2017
20:56:52
https://github.com/fsharp/fsharp
Ммм так он сам на себе написан?))

Nikolay
10.08.2017
20:57:13
Ммм так он сам на себе написан?))
Впрочем, ничего нового

Илья
10.08.2017
20:58:41
Впрочем, ничего нового
Это типа сначала пишется он на одном языке, а потом переписывается на себе? Надо же компилятор на себе скомпилировать. ? *рекурсия*

Google
Nikolay
10.08.2017
21:01:26
https://ru.m.wikipedia.org/wiki/Раскрутка_компилятора

Илья
10.08.2017
21:09:32
https://ru.m.wikipedia.org/wiki/Раскрутка_компилятора
Интересно! ? Ну в общем-то я был прав вроде - самое простое написать изначально компилятор на каком-то известном языке для которого уже существует компилятор. А потом переписать на себе и скомпилировать полученным на предыдущем шаге компилятором.

Evgeniy
11.08.2017
04:59:32
Привет, о начавший третью сотню!
Пришлось всех забанить.

@fvnever Троих за раз! Видал?

Friedrich
11.08.2017
05:00:47
А я в @pro_net сегодня только двух успел :(

Nikolay
11.08.2017
07:06:33
А какой будет функция у pipe backward оператора? f x = f x ?

Nikolay
11.08.2017
07:09:46
Тут просто нашёл такое определение: The definition of backward pipe: let inline ( ) x f = f x

Nikolay
11.08.2017
07:10:50
Это Pipe-forward.
Угу, только его обычно пишут как f x = x f

Nikolay
11.08.2017
07:11:28
Что?
pipe-forward

Хотя получается по смыслу эквивалентно

Evgeniy
11.08.2017
07:12:31
let inline (|>) x f = f x // pipe-forward let inline (<|) f x = f x // pipe-backward

Friedrich
11.08.2017
07:12:53
Угу, только его обычно пишут как f x = x f
Это вводит в заблуждение. Получается, у тебя x — функция, а f — значение.

Ну то есть я бы интуитивно ожидал, что f везде будет функцией :)

Evgeniy
11.08.2017
07:13:36
Угу, только его обычно пишут как f x = x f
Я не совсем понимаю, что означает такая запись. :)

Nikolay
11.08.2017
07:14:29
Хм, ну может я что-то перепутал

Anton
11.08.2017
09:48:38
Ребят, а как прокидывать параметры в fsx и как их там потом ловить?

Evgeniy
11.08.2017
09:54:11
Google
Evgeniy
11.08.2017
09:54:50
tl;dr Одно из различий между скомпилированным и интерактивным режимами заключается в том, как можно получить доступ к аргументам командной строки. В скомпилированном режиме используйте System.Environment.GetCommandLineArgs. В скриптах используйте fsi.CommandLineArgs.

И там же пример есть.

Anton
11.08.2017
10:00:50
угу, пасибо =)

Igor
11.08.2017
10:16:01
Как создать простейшее F# core clr консольное приложение с PAKET?

Может есть какой-то готовый шаблон, как у fable?

Evgeniy
11.08.2017
10:24:09
Может есть какой-то готовый шаблон, как у fable?
Насколько мне известно, шаблона нет. Просто качаешь бинарники в .paket и создаёшь файлы со списком пакетов.

Igor
11.08.2017
10:24:36
Ну да, я через brew поставил paket и после dotnet new вызвал convert-from-nuget

Pavel
11.08.2017
10:40:48
Есть экстеншен для vscode, там командой paket init создасться папка, скачется бинарник, и paket.dependencies вроде н тоже создаст

Evgeniy
11.08.2017
14:13:48
Привет!

Пожалуйте. о/

Andrew
11.08.2017
16:55:53
Ого, двести человек

Кстати, можно снять pinned message - как я понял, статья вычиталась

Evgeniy
11.08.2017
17:17:14
Кстати, можно снять pinned message - как я понял, статья вычиталась
Да, спасибо. Ждём в понедельник на хабре.

Привет!

Смотрите, какое интересное предложение. https://github.com/fsharp/fslang-suggestions/issues/600

Хотя, конечно, хотелось бы union types, как в TypeScript.

Готовый материал для проведения воркшопа по F#. В Jet такие проводят. :) http://www.fsharpworkshop.com/

Evgeniy
12.08.2017
08:44:21
А что там в TS?
Там untagged unions, когда ты просто перечисляешь конкретные типы без тегов: TypeA | TypeB | TypeC.

Кажется, в TS и intersection types есть.

Google
Igor
12.08.2017
08:45:16
И что это тебе даст?

Evgeniy
12.08.2017
08:54:51
И что это тебе даст?
Не нужно будет писать DU врапперы для притимивных типов, например. С одной стороны это облегчит жизнь, с другой — никто не заставит задумываться об хороших типах в рамках доменной модели.

Есть еще третий интересный тип объединений, из OCaml. Это polymorphic variants. Они позволяют определять кейсы и комбинировать их на месте, без объявления отдельных типов.

let is_positive = function | `Int x -> Ok (x > 0) | `Float x -> Ok (x > 0.) | `Not_a_number -> Error "not a number";; > val is_positive : [< `Float of float | `Int of int | `Not_a_number ] -> (bool, string) Result.t = <fun>

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