@Fsharp_chat

Страница 437 из 772
Roman
21.12.2017
12:17:09
https://youtu.be/s5qeG5hMfEE

но про сам фшарп там не особо много. В основном про то, как ФП хорошо ложится на микросервисы

Aleksey
21.12.2017
12:19:48
А докладчик-то — автор книги по Haskell
Антону нужно было приложеньки писать под Android. Что поделать, если поддержка Котлина на этой платформе хорошая, а хаскеля - плохая?

A64m
21.12.2017
12:23:24
она там не то что плохая, а вообще никакая, плохая она много где.

Google
Aleksey
21.12.2017
12:24:43
Я попытался смягчить :)

A64m
21.12.2017
12:25:17
(но, справедливости ради надо заметить, что кросскомпилятор для андроида теперь самому собирать не надо)

Григорий
21.12.2017
12:34:19
есть ли какие-то способы в F# для контроля побочных эффектов?

Artemy
21.12.2017
12:36:32
Признаться, не представляю, что это может быть. Интересно было бы узнать.

A64m
21.12.2017
12:37:31
нет таких способов

Григорий
21.12.2017
12:40:47
уточню вопрос, то есть никак нельзя переписать функцию, чтобы можно было узнать, что, например, внутри нее производиться вывод в файл?

Aleksey
21.12.2017
12:40:57
Никак нельзя

"Никак нельзя узнать, что не производится"

Летучая
21.12.2017
12:41:41
Можно руками IO написать

Чтоб было как в Хаскеле )

Aleksey
21.12.2017
12:42:02
Нельзя запретить делать эффекты в функции.

Написать систему эффектов то можно

A64m
21.12.2017
12:44:38
ну, в принципе, можно написать такую стандартную библиотеку, с чистыми функциями, правда это осложняется тем, что есть прямо в языке фичи вроде мутабельных полей.

Google
Григорий
21.12.2017
12:46:12
https://youtu.be/mOS5qTd7JRY?t=542 в этом видео докладчик показывает, что типо в dotNet есть аттрибут Pure и если прикрутить его к функции, то она является без побочных эффектов, по-другому никак?

A64m
21.12.2017
12:46:30
но в сочетании с кастомным чекером, который будет эти фичи запрещать и разрешать runIO только в главной функции приложения

непонятно, только ради чего с этим связываться.

Григорий
21.12.2017
12:49:29
то есть со стороны dotNet это никак не будет проверяться?

Aleksey
21.12.2017
12:49:35
Не будет

P
21.12.2017
12:49:40
верно, комментарий сайма по этому поводу - как мы введём констрейнт на HOF

P
21.12.2017
12:53:59
а что такое HOF?
https://en.wikipedia.org/wiki/Higher-order_function

Григорий
21.12.2017
12:54:11
а понял

Alexey
21.12.2017
15:35:06
Ну можно наверное ещё написать анализатор , который будет чекать известные ему IO вне IO контекста

И сделать его частью своего build'а

И FSharpLint для ide настроить

Но профит от таких усилий неоч ясен + ничего нельзя сказать о сторонних библиотеках

Или просто для себя решить, что вместо IO у тебя всегда Async и RunSynchr.. ты нигде помимо старта прилодения не будешь юзать

Sergey
21.12.2017
19:55:21
а записи каких конференций по F# есть на youtube?
много лет проходит https://skillsmatter.com/conferences/8053-f-sharp-exchange-2017#program смотреть видео можно прямо тут залогинившись

и еще есть сайтик http://c4fsharp.net и тут Ryan давно собирает разные F# выступление в шапке есть ссылки на каналы https://vimeo.com/channels/c4fsharp и https://www.youtube.com/channel/UCCQPh0mSMaVpRcKUeWPotSA/feed

а еще есть выстепления на самом fsharp.org - http://fsharp.org/videos/1

Nikolay
22.12.2017
07:13:24
https://github.com/ionide/ionide-vscode-fsharp/issues/404 .fsi починили

Igor
22.12.2017
09:03:24
Ура-ура, готовы все видео с конференции ? Смотреть тут
Самый топчиковый доклад ? “Николай Рыжиков. ПОЛНЫЙ СТЭК НА "ОДНОМ" ЯЗЫКЕ ИЛИ ИЗОМОРФИЗМ РИЧА ХИККИ”

Google
Григорий
22.12.2017
09:28:34
"Алексей Пирогов. СКРИПТУЕМ И АВТОМАТИЗИРУЕМ БЕЗОПАСНО С HASKELL" ждем курсы для админов =)?

я уже представляю себе их рекламную компанию

Anna
22.12.2017
09:38:20
Ой, надо будет посмотреть. Кажется, у меня вот-вот освободится немножко времени

Григорий
22.12.2017
09:49:31
Вот смотрю на Haskell, в нем пишется объявление функции и реализация отдельно? А можно так же на F#?

A64m
22.12.2017
10:01:34
ну, на первый взгляд, при помощи пары расширений можно

параметры, по крайней мере, аннотация возвращаемого значения по другому будет выглядеть

Григорий
22.12.2017
10:03:57
Не, курсы для админов не хочу делать :)
Предположим, я написал скрипт на Haskell с Turtle. Потом я захотел получить отдельный исполняемый файл из этих скриптов. Мне прийдется создать отдельно проект и перетащить файлы скриптов или есть какой-то "магический" инструмент, которому я просто укажу скриптики и получу исполняемый файл?

Aleksey
22.12.2017
10:05:31
Можно просто скомпилить бинарь. Без создания проекта

A64m
22.12.2017
10:10:54
Можно просто скомпилить бинарь. Без создания проекта
а как со стековым скриптом-то это сделать?

Aleksey
22.12.2017
10:13:08
stack ghc <имя_скрипта>.hs

A64m
22.12.2017
10:17:55
он так разве поймет какие пакеты в соотв строчке внутри файла прописаны? Вроде ж это надо в самом файле runghc на ghc править

Aleksey
22.12.2017
10:19:35
если скрипт - именно script, то все пакеты и так будут указаны в stack-комменте

A64m
22.12.2017
10:20:41
да, но если передать скрипт фактически в ghc в окружении т.е. stack ghc разве стек вообще будет эту строчку в комменте читать?

Aleksey
22.12.2017
10:21:03
> cat Hi.hs -- stack --resolver=lts-8.20 script --package=turtle {-# LANGUAGE OverloadedStrings #-} import Turtle main = echo "Hi!" > stack ghc Hi.hs

Всё собралось

Evgeniy
22.12.2017
10:22:22
@haskellru

Aleksey
22.12.2017
10:24:51
Прошу извинить и больше не буду

Google
Aleksey
22.12.2017
10:52:56
Думаю, имеется в виду написание в виде f : Int -> Int -> Int f x y = x + y * x

A64m
22.12.2017
10:53:55
в отдельном файле-то и в F# можно сигнатуры отдельно прописывать

Григорий
22.12.2017
10:54:06
в отдельном файле-то и в F# можно сигнатуры отдельно прописывать
да, но только насколько я знаю через интерфейс и абстрактный класс

Думаю, имеется в виду написание в виде f : Int -> Int -> Int f x y = x + y * x
то есть похожим образом написать в F# нельзя?

A64m
22.12.2017
10:56:57
только в одельных файлах #f.fsi val f : int -> int -> int #f.fs let f x y = x + y * x

Я сначала просто вопрос не понял, думал, можно ли на хаскеле как на F# типы аннотировать

Григорий
22.12.2017
11:02:14
только в одельных файлах #f.fsi val f : int -> int -> int #f.fs let f x y = x + y * x
для .fsx так не получиться, только .fsi и .fs?

A64m
22.12.2017
11:02:31
вроде да

в F# только это бесполезная фича, в других эмелях можно параметризовать модули, и типы параметров - вот такие вот сигнатуры, т.е. можно подменять "импорт" одного модуля другим, который ту же сигнатуру имплементирует

A64m
22.12.2017
11:09:03
а, ну да, публичность-то таким образом регулируется, так что не бесполезная

Artemy
22.12.2017
11:09:35
В .fsi-файлах, к сожалению, сигнатуры не влияют на вывод типов в файлах с кодом

Anna
22.12.2017
11:11:03
Что-то я недовкурила эту особенность модулей в эмелях, надо будет потом наверстать

Artemy
22.12.2017
11:11:09
И вообще, в оф. доке указано, что эти файлы обычно генерируются по файлам с кодом, чтобы затем в них указать, какие из функций идут во внешнее API.

Григорий
22.12.2017
11:11:11
В .fsi-файлах, к сожалению, сигнатуры не влияют на вывод типов в файлах с кодом
то есть, мне все равно прийдется указывать тип, если система типов не сможет вывести его?

Google
Artemy
22.12.2017
11:13:13
то есть, мне все равно прийдется указывать тип, если система типов не сможет вывести его?
И ещё если в коде вдруг выводится тип, не соответствующий указанному в fsi, просто ошибка выводится.

Даже если авто-выведенный тип можно привести к типу, указанному в сигнатуре.

Григорий
22.12.2017
11:14:05
Ага
#f.fsi val f : TypeA -> int #f.fs let f a = a.ToInt() + 1234То есть тут мне прийдется указать: #f.fs let f (a:TypeA) = a.ToInt() + 1234Так что ли?

Artemy
22.12.2017
11:15:13
Вроде, да

Григорий
22.12.2017
11:15:39
печальненько

Artemy
22.12.2017
11:15:41
Надо бы, конечно, проверить. А то я всего один раз пробовал fsi-файлами пользоваться. И не использовал их больше, потому что они оказались не тем, что я ожидал.)

Anna
22.12.2017
11:15:48
Даже если авто-выведенный тип можно привести к типу, указанному в сигнатуре.
странно, я думала, в сигнатуре допустим более общий тип по сравнению с тем, что вывелся

A64m
22.12.2017
11:17:34
это должно от позиции (положительной/отрицательной) зависеть

Artemy
22.12.2017
11:17:49
странно, я думала, в сигнатуре допустим более общий тип по сравнению с тем, что вывелся
Вообще, надо все эти аспекты проверить. А то я помню, что я с каким-то из ограничений столкнулся, но вот не могу сейчас точно вспомнить, что там было.

A64m
22.12.2017
11:18:43
т.е. вообще-то в эмелях сигнатуры матчатся так что имплементация может принимать более общие типы и возвращать более конкретные (тут мне главное не перепутать)

Anna
22.12.2017
11:19:20
это условия, которым должны удовлетворять типы аргументов и возвращаемого результата, чтобы тип функции был более общим, чем у другой

A64m
22.12.2017
11:20:37
да

Anna
22.12.2017
11:20:57
но суть остаётся: у функций в сигнатуре должен быть более общий тип, чем в реализации

A64m
22.12.2017
11:22:09
так. нет, наоборот должно быть

Anna
22.12.2017
11:23:03
да

натупила походу

ай, это всегда мозг взрывает

A64m
22.12.2017
11:28:58
да

Anna
22.12.2017
11:30:14
ковариантность и контравариантность для subtyping же работает, а тут с этим параметрическим полиморфизмом по-другому. Или нет. Или да. аааа

Artemy
22.12.2017
11:38:30
Насчёт влияния fsi-файлов на вывод типов в файлах с реализацией: https://github.com/fsharp/fslang-suggestions/issues/522 Там в конце Дон Сайм объяснил, почему эту фичу не завезли и скорее всего не завезут.

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