
ect"==typeof module.exp
02.08.2017
11:38:36
почему функцию нельзя анотировать таким образом?
let add a b : int -> int -> int = a + b

Vasily
02.08.2017
11:41:40
ПОтому что то, что после двоеточия, по идее относится к типу параметра b

Aleksander
02.08.2017
11:42:28

ect"==typeof module.exp
02.08.2017
11:43:15

Google

ect"==typeof module.exp
02.08.2017
11:43:59
а можно функцию аннотировать вне определения? типа
val add : int -> int -> int
let add a b -> a + b

Evgeniy
02.08.2017
11:44:53

Aleksander
02.08.2017
11:49:21
может в fsi как раз можно?

ect"==typeof module.exp
02.08.2017
11:49:34
тоже нельзя

Oleg
02.08.2017
11:49:36

ect"==typeof module.exp
02.08.2017
11:51:00
нашёл один костыль, но он слишком громоздкий

Vasily
02.08.2017
11:51:17
А тебе зачем такое, собственно?

ect"==typeof module.exp
02.08.2017
11:51:42
type myFunc = int -> int -> int
let myFunc : myFunc = fun a b -> a + b
Я в домашних проектах предпочитаю использовать длинные имена переменных, чтобы меньше писать комментариев, и часто при проектировании набрасываю сразу типы которые ожидаю на входе и выходе.
F# язык позволяющий очень компактно выражать свои мысли, по этому предпочёл бы пожертвовать одной лишней строкой на каждую функцию вместо того чтобы городить очень длинные строчки

Evgeniy
02.08.2017
11:53:51

ect"==typeof module.exp
02.08.2017
11:54:19
спасибо

Igor
02.08.2017
12:43:28
Случайно наткнулся на годные лекции по Idris на русском (пока посмотрел 3 очень понравилось).
Может пригодится тем кто хочет знать что такое “зависимые типы”, для расширения кругозора.
https://www.youtube.com/playlist?list=PL-_cKNuVAYAXFRLj6n2nDjI1cyHjuI3HI

Google

Anton
02.08.2017
12:48:21

Evgeniy
02.08.2017
12:49:54
Кажется, с Брагилевским. Да, @fvnever?

Anton
02.08.2017
13:02:56

Uladzimir
02.08.2017
13:04:10
Это должна быть константа, а не результат String.Format

Anton
02.08.2017
13:05:40
хм
Тогда вопрос. Как нагенерить ссылку ? 0_о

Nikolay
02.08.2017
13:09:11
Лучше юзать так:
let url = sprintf "http://blablalba.com/key=%s" key
В данном кейсе правда ошибку не исправит

Anton
02.08.2017
13:09:30
но всёравно спасибо.
хм, как же тогда прокидывать параметры

Uladzimir
02.08.2017
13:10:02
для того, чтобы получить типы в design-time, нужна константа - урл к какому нибудь сэмплу json'а нужной структуры. А когда хочешь загрузить реальные данные в рантайме, тогда уже можно взать любую строку и вызвать Champions.AsyncLoad(anyString)

Anton
02.08.2017
13:10:57
Хм, понятно. Но проблема в том...Что key меняется
у риотов немного API дурацкое
его время от времени нужно обновлять в проекте
в каждой ссылке

Nikolay
02.08.2017
13:11:50

Uladzimir
02.08.2017
13:12:14
да, или сэмпл json сохрани в файл и указывай путь к файлу вместа урла

Nikolay
02.08.2017
13:12:17
Хмм
Можно сделать скрипт, который будет JSON в файл выгружать
Например, при сборке

Google

Uladzimir
02.08.2017
13:13:51
или не использовать type provider :P

Anton
02.08.2017
13:18:25
Что-то действительно какие-то проблемы на ровном месте.

Vlad
02.08.2017
13:36:01
а есть какие-то способы дебага провайдеров? а то у меня sql provider крашится без явных причин, хоть баг бы найти

Uladzimir
02.08.2017
13:43:43
Сам провайдер можно дебажить, если есть его исходники, я делал так:
1 - писал простой скрипт, который использует тайп провайдер и воспроизводит проблему
2 - запускал fsi
3 - открывал в студии код тайп провайдера
4 - аттачился к процессу fsi
5 - в fsi писал #load "my-script"
Возможно есть варианты попроще, но сходу не могу придумать

Oleg
02.08.2017
13:47:57
Подскажите, как это можно внятнее изложить:
let rec getDeps = getChangeReasons ctx (fun x -> getDeps x) |> memoizeкомпилятор жалуется:
> This and other recursive references to the object(s) being defined will be checked for initialization-soundness at runtime through the use of a delayed reference. This is because you are defining one or more recursive objects, rather than recursive functions. This warning may be suppressed by using '#nowarn "40"' or '--nowarn:40'.
Есть вариант:
let rec getDeps x = (getChangeReasons ctx getDeps |> memoize) xно у меня сомнения что мемоизация сработает

Vasily
02.08.2017
13:52:35

Vlad
02.08.2017
13:54:04
код запускается, падает на методе Dictionary.get_Item где-то внутри

Nikolay
02.08.2017
18:18:22
@gsomix ты там про CI спрашивал, сделал :)
А функция, которая бегает в БД за данными, получается не может быть чистой?

Oleg
02.08.2017
20:24:12

Igor
02.08.2017
20:24:22

Nikolay
02.08.2017
20:40:32
В .Net Core 2.0 F# криво проект создаёт, но если ручками добавить сдк и референсы, то всё ок
Простите, обманул, всё ок, просто ему теперь ну нужны референсы, круто.
Как-то так теперь выглядит .fsproj: https://gist.github.com/Dolfik1/3b1c8ddeff3856254025de034b4bfac6

Igor
02.08.2017
20:51:24

Nikolay
02.08.2017
20:51:44
А так хз, мне нужен 2.0, чтобы под ARM запускать
Всё ок работает

Google

Igor
02.08.2017
20:53:56
Не велика разница c 1.1 https://gist.github.com/y2k/04c2c59fec1416fa62436bc59c9f71f0
(по сравнению со старыми проектами)

Nikolay
02.08.2017
20:54:43
На две строчки меньше :)

Igor
02.08.2017
20:58:39

Nikolay
02.08.2017
20:58:57
Ты про FSharp.Core?

Igor
02.08.2017
20:59:39
Ну да, стандартная либа с option и тд

Nikolay
02.08.2017
21:00:07
Не нужна
Видать по дефолту идёт для .fsproj

Igor
02.08.2017
21:01:46
Логично ?

Aleksander
02.08.2017
21:02:36
вот же прописано <PackageReference Include="FSharp.Core" Version="4.1.*" /> oO или вы о чем-то другом?

Igor
02.08.2017
21:05:24
Это в моем под 1.1,
в том что выше под 2.0 этого нет

Aleksander
02.08.2017
21:05:48
а, и правда.. чудеса :)

Evgeniy
03.08.2017
04:04:05
Привет! o/

Pasha
03.08.2017
06:00:25
Привет

Artem
03.08.2017
06:34:49
гайз, а можно немного оффтопа? (раз выше всё равно за тулзы говорили)
вот был nuget. но при этом тут в f# чате чаще говорят за paket. зачем понадобился ещё один пакетный менеджер? какие проблемы он решает??

Evgeniy
03.08.2017
06:35:20
Первый вопрос.

Artem
03.08.2017
06:39:58
https://fsprojects.github.io/Paket/faq.html
спасибо)
а зачем нам знать какие именно пакеты являются транзитивными зависимостями?
насколько я понял, это чтобы как в пакетных менеджерах в линукс - потом одной командой можно было удалить те пакеты, которые никому не нужны и на которые никто не ссылается?
или чтобы мы в принципе понимали что от чего зависит?

Evgeniy
03.08.2017
06:43:33
То есть повляется возможность нормально управлять версиями в том числе и транзитивных зависимостей.

Google

Artem
03.08.2017
06:44:45

Evgeniy
03.08.2017
06:45:57
Просто он очень удобно складывает пакеты локально.
Например, не указывает версии в названии папок.
Поэтому скриптами очень просто ссылаться на dll.
https://twitter.com/k_cieslak/status/892987012415762432

Roman
03.08.2017
08:43:36
Привет!

Nikolay
03.08.2017
08:44:17
Видимо он теперь определяет, что проект .fsproj, и сам подтягивает Sdk и FSharp.Core

Roman
03.08.2017
08:48:19
Круто

Igor
03.08.2017
08:53:48
У меня не пашет на 1.1 (нажимаешь, а ничего не происходит)

Nikolay
03.08.2017
09:27:12
В .Net Core в целом нормально ручками править файл

Oleg
03.08.2017
10:48:37

Nikolay
03.08.2017
10:50:37