@Fsharp_chat

Страница 250 из 772
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
почему функцию нельзя анотировать таким образом? let add a b : int -> int -> int = a + b
ты указываешь тип результата, а не самой функции. то что ты написал, соответствует let add a b : (int -> int -> int) = fun a -> fun b -> a + b

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

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
Увы, нельзя. :(
А в fsi разве нельзя? ?

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
type myFunc = int -> int -> int let myFunc : myFunc = fun a b -> a + b
let myFunc : int -> int -> int = fun a b -> a + b

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
let myFunc : int -> int -> int = fun a b -> a + b
ого, а я и не знал, что так можно

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
Хм, понятно. Но проблема в том...Что key меняется
Просто сделай строку с JSON: type Json = JsonProvider<""" { "key": 1, "value": 2 } """>

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но у меня сомнения что мемоизация сработает

Vlad
02.08.2017
13:54:04
Mssql?
oracle)

код запускается, падает на методе 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
Как-то так теперь выглядит .fsproj: https://gist.github.com/Dolfik1/3b1c8ddeff3856254025de034b4bfac6
Подожи, а где либы f#? Как он вообще понимает что он f#?

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. зачем понадобился ещё один пакетный менеджер? какие проблемы он решает??

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
Да, чтобы можно было удалять, например. Но основная фишка Paket даже не в этом, а в lock файле, который фиксирует все прямые и транзитивные зависимости. Это нужно для того, чтобы билды были стабильные.
ну пока не сталкивался с какими-то особо проблемами с нугетом. но наверное потому, что у меня нет ни одного действительно большого и серъёзного проекта, который уже пару как минимум в продакшне :\

Evgeniy
03.08.2017
06:45:57
Просто он очень удобно складывает пакеты локально.

Например, не указывает версии в названии папок.

Поэтому скриптами очень просто ссылаться на dll.

https://twitter.com/k_cieslak/status/892987012415762432

Nikolay
03.08.2017
08:44:17
Как так?
Посмотри гист ниже

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

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

https://twitter.com/k_cieslak/status/892987012415762432
А с .net core работает? Раньше не работало

https://twitter.com/k_cieslak/status/892987012415762432
А с .net core работает? Раньше не работало

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
https://twitter.com/k_cieslak/status/892987012415762432
Уже 10 минут ползаю по менюшкам... Где все эти команды и где solution explorer?!

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