@haskellru

Страница 451 из 1551
Alexandr
04.10.2017
12:35:43
Всем привет! Может кто подсказать как можно справиться с подсказками связанные с зависимостями, использую vscode и haskero? Чтобы не делал, постоянно вылезают ошибки о том, что модулей, которые я иморчу не существует

Aleksey
04.10.2017
12:37:38
Модули прописаны в cabal-файле?

Alexander
04.10.2017
12:37:55
скорее зависимости не прописаны

пакеты в которых эти модули

Google
Alexandr
04.10.2017
12:38:12
Да, прописывал в кабалфайле, все компилится и работает

Alexander
04.10.2017
12:38:14
вообще если писать саму ошибку, то это может помочь

Yuriy
04.10.2017
12:38:17
или haskero неправильно запускает stack

Alexander
04.10.2017
12:38:24
или кабал

Alexandr
04.10.2017
12:42:00
я очень зря панику поднял, прошу меня простить:)

Просто я открывал не проект, а папку с проектами из-за этого и получал проблемы

Alexander
04.10.2017
12:42:52
=)

Alexandr
04.10.2017
12:44:06
А можно-ли haskero научить давать подсказки по глобальным зависимостям?

Например у меня стоит квикчек и я хочу что-то быстро проверить, но создавать для этого проект - было бы излишне

Aleksey
04.10.2017
12:53:37
Всегда можно сделать самостоятельный скрипт и спец комменте указать, какие пакеты нужны для запуска. Тогда пакеты установтся в "глобальный проект"

Или можно вне проекта сделать stack install quickcheck - пакет установится в global project и будет доступен при stack runhaskell и stack ghci

Alexandr
04.10.2017
13:00:43
Так и сделал, спасибо! Туплю немного)

Aleksey
04.10.2017
13:01:49
А если быстро-быстро что-то проверить хочется, то stack ghci --package=turtle --package=foldl и т.д.

Google
Aleksey
04.10.2017
13:10:22
Кто уже early bird'нулся на fbyby?

Alexander
04.10.2017
13:13:50
я ещё нет но надо бы

Aleksey
04.10.2017
13:16:56
115BYN (3.3т.р)

Yuriy
04.10.2017
13:33:12
боюсь опять драться за еду

подожду настоящих билетов

Andrew
04.10.2017
17:03:16
Как там кстати Fabien Potencier))?

Konstantin
04.10.2017
17:07:31
К сожалению я не знаю, кто это

а вопрос был простой

я хотел подрубить ДИ контейнер в ентити

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

и никто не объяснил почему

но свой ушат говна вылил просто каждый

Julian
04.10.2017
17:38:18
Подключение контейнера к энтити - это начала конца по мнению многих. Очень велик соблазн начать усложнять энитити и пихать туда логику, а не использовать православные сервисы.

Andrew
04.10.2017
17:40:46
Blinchik
04.10.2017
17:44:38
Есть функция с сигнатурой mapBoth :: forall b c . (forall a . [a] -> [a]) -> [b] -> [c] -> ([b], [c])Берёт 2 списка разных типов и применяет к ним функцию. Если я попытаюсь передать первым аргументом функцию с какими-нибудь констрейнтами (например sort), оно не скомпилируется. Как написать чтобы компилировалось?

kana
04.10.2017
17:48:16
у тебя тут сказано, что первая функция - forall a . [a] -> [a], то есть она должна работать ДЛЯ всех a, под такую сигнатуру только id подходит

? animufag ?
04.10.2017
17:48:29
не

kana
04.10.2017
17:48:31
ну, map id

? animufag ?
04.10.2017
17:48:36
он знает что это списки

Google
? animufag ?
04.10.2017
17:48:44
может длину менять

дублировать элементы

kana
04.10.2017
17:49:09
хм, да, не подумал

? animufag ?
04.10.2017
17:49:30
констрейнты на а он наложить не сможет

ну разве что сразу в сигнутуре mapBoth

первый forall я так понимаю можно опустить - хаскел и так его по умолчанию ставит

Blinchik
04.10.2017
17:51:15
Я понимаю почему не работает

Я спрашиваю как сделать чтобы работало

? animufag ?
04.10.2017
17:51:52
ага ок

только я туговат и пишу для себя.

Blinchik
04.10.2017
17:52:37
ну разве что сразу в сигнутуре mapBoth
Не подходит такой вариант к сожалению

Оно должно для любых констрейтов работать

nsdkfhudorgihn
04.10.2017
17:53:14
а че компилятор говорит?

Blinchik
04.10.2017
17:53:41
Не определен Eq для a

No instance for (Ord a) arising from a use of ‘sort’

nsdkfhudorgihn
04.10.2017
17:54:48
ну так, чтоб сорт работал, и b и c должны принадлежать Орд а

попробуй в сорте укажи или сюда орд добавь сначала

? animufag ?
04.10.2017
17:55:26
они могут принадлежать

всё равно не сработает

Artyom
04.10.2017
17:55:36
это известная задача вроде бы в упрощённом варианте, “какой тип у функции \f -> (f True, f "foo") ”

Google
Artyom
04.10.2017
17:56:32
только вот решения я не помню :( или вообще никак не решается, или через какую-то жуть

Pavel
04.10.2017
17:56:39
попробуй в сорте укажи или сюда орд добавь сначала
а если тебе неизвестен контстрейнт?

kana
04.10.2017
17:56:48
типа такого нельзя сделать? mapBoth :: (cnt b, cnt c) => Proxy cnt -> (cnt a => [a] -> [a]) -> [b] -> [c] -> ([b], [c]) mapBoth Proxy f [] [] = ([], []) mapBoth Proxy f xs ys = (f xs, f ys)

это не работает, конечно

Alexander
04.10.2017
17:57:49
f :: forall x . x -> () например

тогда функия \f -> (f True, f "foo") будет :: (forall x. x -> ()) -> ((),())

можно сделать более внятную

Alexander
04.10.2017
17:58:49
можно

Artyom
04.10.2017
17:59:00
@qnikst не, ну разумеется, но надо не “любой тип”, а “наиболее общий”

kana
04.10.2017
17:59:05
ну, контрейт - это обычный тип, а тип через проки можно передать

Alexander
04.10.2017
17:59:13
что значит наиболее общий для Haskell?

у нас subtyping не завезли

Pig
04.10.2017
17:59:34
Вот так работает sort: mapBoth :: (Ord b, Ord c) => (forall a. Ord a => [a] -> [a]) -> [b] -> [c] -> ([b], [c])

Alexander
04.10.2017
17:59:50
я начала дискуссии не видел если что

Artyom
04.10.2017
17:59:51
я вот как раз только собирался добавить сноску “for some reasonable definition of ‘наиболее общий’” :troll:

Alexander
04.10.2017
18:00:04
=)

Artyom
04.10.2017
18:01:41
я думаю, в этом случае пойдёт любой тип, который позволит передавать функции вида f :: forall a. (c1 a, c2 a, ...) => a -> B, где String и Bool удовлетворяют всем констрейнтам c1, c2, ...

? animufag ?
04.10.2017
18:02:45
погуглил прокси и там как обычно

kana
04.10.2017
18:04:19
кстати, вполне работает, лол отдает ([2,3],[True,True])

Google
kana
04.10.2017
18:04:21


? animufag ?
04.10.2017
18:04:58
ну разве что сразу в сигнутуре mapBoth

Не подходит такой вариант к сожалению

Вот так работает sort: mapBoth :: (Ord b, Ord c) => (forall a. Ord a => [a] -> [a]) -> [b] -> [c] -> ([b], [c])

Pig
04.10.2017
18:05:34
А без первого кейса с пустыми списками будет работать?

kana
04.10.2017
18:06:03
ой, там случайно

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

Pig
04.10.2017
18:07:42
(Используемые расширения RankNTypes и ConstraintKinds, если ghci правильно подсказывает.)

kana
04.10.2017
18:07:44
? animufag ?
04.10.2017
18:08:01
https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Proxy.html

kana
04.10.2017
18:08:02


? animufag ?
04.10.2017
18:08:22
https://hackage.haskell.org/package/tagged-0.7.2/docs/Data-Proxy.html

кстати интересно было бы посмотреть на hackage с позиции иерархии модулей

kana
04.10.2017
18:10:08
это просто единичный тип с фантомным параметром, который можно использовать для передачи типа

? animufag ?
04.10.2017
18:10:16
да

? animufag ?
04.10.2017
18:11:22
к сожелению это сложно написать в модуле лучше написать рекурсивное определение, мол здесь в модуле описан прокси тип, про который вы несомненно слышали, иначе зачем сюда вообще смотрите

Blinchik
04.10.2017
18:18:27
У меня не компилируется

И оно должно работать так: ghci> mapBoth (nub . sort) [10, 2, 1, 2] [True, False, True] ([1, 2, 10], [False, True]) ghci> mapBoth ((:[]) . product . nub) [10, 2, 1, 2] [5.3, 4.2] ([ 20 ], [ 22.26 ])

Страница 451 из 1551