
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

Evgeniy
10.08.2017
17:50:53

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

Aleksander
10.08.2017
19:32:31

Andrew
10.08.2017
19:48:52

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

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

Nikolay
10.08.2017
20:54:47

Илья
10.08.2017
20:56:52

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 ?

Evgeniy
11.08.2017
07:08:03

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

Evgeniy
11.08.2017
07:10:18

Nikolay
11.08.2017
07:10:50

Evgeniy
11.08.2017
07:11:11

Nikolay
11.08.2017
07:11:28
Хотя получается по смыслу эквивалентно

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 везде будет функцией :)

Evgeniy
11.08.2017
07:13:36

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

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
Привет!
Смотрите, какое интересное предложение.
https://github.com/fsharp/fslang-suggestions/issues/600
Хотя, конечно, хотелось бы union types, как в TypeScript.
Готовый материал для проведения воркшопа по F#. В Jet такие проводят. :)
http://www.fsharpworkshop.com/

Igor
12.08.2017
08:38:07

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>