@haskellru

Страница 365 из 1551
Denis
26.08.2017
12:42:21
вопрос, есть код partitionByCond :: Ord a => (a -> a -> Bool) -> [a] -> [[a]] partitionByCond cond = para psi where psi :: ListF a ([a], [[a]]) -> [[a]] psi = \case Nil -> [] Cons x (a:_, a':b') | cond x a -> (x:a'):b' Cons x (_, r) -> [x]:r но он дает ошибку src/Experiments2.hs:1359:32: error: • Couldn't match expected type ‘a’ with actual type ‘a1’ ‘a1’ is a rigid type variable bound by the type signature for: psi :: forall a1. ListF a1 ([a1], [[a1]]) -> [[a1]] at src/Experiments2.hs:1356:10 ‘a’ is a rigid type variable bound by the type signature for: partitionByCond :: forall a. Ord a => (a -> a -> Bool) -> [a] -> [[a]] at src/Experiments2.hs:1354:20 • In the first argument of ‘cond’, namely ‘x’ In the expression: cond x a In a stmt of a pattern guard for a case alternative: cond x a • Relevant bindings include b' :: [[a1]] (bound at src/Experiments2.hs:1359:21) a' :: [a1] (bound at src/Experiments2.hs:1359:18) a :: a1 (bound at src/Experiments2.hs:1359:13) x :: a1 (bound at src/Experiments2.hs:1359:10) psi :: ListF a1 ([a1], [[a1]]) -> [[a1]] (bound at src/Experiments2.hs:1357:3) cond :: a -> a -> Bool (bound at src/Experiments2.hs:1355:17) (Some bindings suppressed; use -fmax-relevant-binds=N or -fno-max-relevant-binds) Failed, modules loaded: none. Если убираешь тип у psi то все ок, но мне нужно с типом сделать

kana
26.08.2017
12:44:50
ScopedTypeVariables

Denis
26.08.2017
12:45:31
это тут при чем?

kana
26.08.2017
12:45:43
Чтобы хаскель знал, что это один и тот же a, не?

Google
Denis
26.08.2017
12:46:19
нет

тут с x трабла

Vyacheslav
26.08.2017
12:50:37
Привет, а поясните мне за эксепшены. Смотрю тут на http-conduit, и она вроде как кидает эксепшн если запрос зафэйлился, а простого способа узнать какие нет. Это считается нормальным (то что в типе не видно что оно может кинуть)?

Или может это просто плохая либа и надо что-то другое юзать

kana
26.08.2017
12:55:24
Ну я перечитал ошибку несколько раз и она именно про это. A в cond и A в psi - разные типы, сделай их одним с помощью STV. Если это неверно, то хотя бы узнаю об этом точно

нет

тут с x трабла

Denis
26.08.2017
12:57:29
тут еще partitionByCond :: forall a. Ord a => (a -> a -> Bool) -> [a] -> [[a]] forall нужен был

Тёма
26.08.2017
12:57:58
http://www.michaelburge.us/2017/08/25/writing-a-formally-verified-porn-browser-in-coq.html

kir
26.08.2017
13:59:23
STV + forall

Vasiliy
26.08.2017
13:59:28
Привет, а поясните мне за эксепшены. Смотрю тут на http-conduit, и она вроде как кидает эксепшн если запрос зафэйлился, а простого способа узнать какие нет. Это считается нормальным (то что в типе не видно что оно может кинуть)?
про исключения много чего говорят, кто-то говорит никогда их не использовать, только ExceptT IO, кто-то, наоборот, говорит, что если есть IO, то ExceptT и прочее не нужно, есть разные реализации checked-исключений, но факт в том, что если есть IO, то исключение может прилететь какое угодно в любой момент времени, и с этим приходится жить

касательно http-conduit - если сами conduit не нужны, то можно взять http-client

Yuriy
26.08.2017
14:01:45
@seogud, питонисты и жаваскриптеры самые востребованные, по-моему

Google
Alex
26.08.2017
14:02:55
Джависты еще.

Yuriy
26.08.2017
14:03:57
блин, опять я влез, когда всё уже обсудили

Yuriy
26.08.2017
14:04:01
простите

Vyacheslav
26.08.2017
14:04:14
я по сути использую http-client, видимо

conduit мне не очень нужен

делать какой-то catchAll в этом месте?

Yuriy
26.08.2017
14:04:54
Denis
26.08.2017
14:05:27
use UIO, Luke
UIO?))) UFO

Vyacheslav
26.08.2017
14:05:51
use UIO, Luke
ничего не понял

можно немно подробнее

Yuriy
26.08.2017
14:11:31
http://hackage.haskell.org/package/unexceptionalio

это такое IO, из которого ничего (синхронного) не вылетает

я его не использовал, но я и от исключений не страдаю

Alex
26.08.2017
16:21:21
Q Q: Здравствуйте, подскажите пожалуйста мне 36 , память и вообще мышление не так остро работают как прежде. Хочу уйти в онлайн профессии , где можно работать по удаленке. Рассматривал позиции seo,smm , директоров, но сейчас все это упростилось , что эти профессии не востребованы и платят не много, я уже не говорю про дизайнеров, всех этих профессий , закат наступил в 2014 году, да безусловна ассы своего дела востребованы Но это ассы, к которым я себя не отношу. И из всех "онлайн профессий" я так понял , возможно я ошибаюсь поправьте меня если не так являются программисты, даже плохой программист получает не плохо. Но этих видов программистов тысячи.  Теперь собственно вопросы: Какую именно специализацию выбрать, чтобы было бы поменьше изучения и стабильная востребованность И второй вопрос есть, ли что нибудь, чтобы ты пришел одновременно работал бы программистом и обучался этому в команде по удаленке? P.s / понимаю сейчас будет много флуда, но Гугл ответов не дал
лучшее щас: крипта.

Vasiliy
26.08.2017
16:35:29
делать какой-то catchAll в этом месте?
я лично, начитавшись статей сноймана, использую safe-exceptions для обработки исключений и шарюсь в случае необходимости по документации и коду, выясняя, какие именно исключения могут вылететь

Alexander
26.08.2017
17:07:03
но safe-exceptions же только для чуть более аккуратной работы с асинхронными исключениями

Leonid
26.08.2017
17:11:14
и это очень хорошо

Alexander
26.08.2017
18:32:04
нормально

Google
Leonid
26.08.2017
19:19:43
:)

Никита
27.08.2017
09:49:22
Если из хаскеля убрать вопрос, то получится ад Проверяйте

Leonid
27.08.2017
10:07:15
@seogud займись devops и смотри на чем популярно ароматизации писать

Автоматизации

Хотя..

Ilya
27.08.2017
11:40:30
Вы ловили ошибку GHC "My brain just exploded"? ?

С юмором они там

My brain just exploded I can't handle pattern bindings for existential or GADT data constructors. Instead, use a case-expression, or do-notation, to unpack the constructor.

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

киллер-фича хаскель!

Владислав
27.08.2017
11:52:28
Какую ошибку надо допустить, чтобы он о себе в первом лице заговорил?)

Alexander
27.08.2017
11:55:29
ловил

gadt в лет развернуть и готово

let A s = myGadt

Ilya
27.08.2017
13:01:57
Да походу не туда forall воткнул

Как завернуть полиморфную функцию в конструктор? Чтобы её можно было доставать

Собсно это я и хотел сделать

Типа data X b = X (t a -> b), функция внутри полиморфна по a

Google
Dmitry
27.08.2017
14:18:03
Добавить forall? Например, как это сделано с типом Fold из прекраснейшей библиотеки foldl data Fold a b -- | @Fold @ @ step @ @ initial @ @ extract@ = forall x. Fold (x -> a -> x) x (x -> b)

Ilya
27.08.2017
14:49:30
Забавно, что ghc это спокойно съел

Но зато потом стал ругаться "my brain just exploded"

А что вообще значит эта конструкция? data X b = forall a. X (t a -> b)

Компилится, но не даёт развернуть конструктор

Alexander
27.08.2017
15:03:36
это exists

очень приближенно

смысл совсем разынй и конструкция валидная

Index
27.08.2017
18:02:20
В 8.2 такой ошибки больше нет

Alexander
27.08.2017
18:09:46
о круто, можно пару мест уростить

*упростить

@Masteroid data X b = X (forall a . a -> b) значит, что в X лежит функция, которая работает для любого типа a который подставит тот, кто разворачивает значение, data X b = forall a . X (a -> b) значит, что в X лежит функция работающая для какого-то конкретного a, который определил тот, кто эту функцию в X клал

Alexander
27.08.2017
18:21:27
что интересно без доп констрейнта вторая конструкция бесполезна, т.к. ты того a не знаешь

вообще я чаще её встречаю, но например как data SomeFoo = forall x . Foo x, Typeable x => SomeFoo x

ну или т.п.

Ilya
27.08.2017
18:22:29
Констрейнт это в смысле ограничить тип?

Принадлежностью к классу

Google
Alexander
27.08.2017
18:22:42
да

Ilya
27.08.2017
18:22:51
Прикольно

Alexander
27.08.2017
18:22:55
тогда ты точно знаешь что можешь применять методы этого класса к значению

Ilya
27.08.2017
18:23:29
Хаскель не перестает удивлять

Alexander
27.08.2017
18:23:45
а что тут удивительного?

Ilya
27.08.2017
18:24:21
Для меня это выглядит как хак для неполноценной системы типов х-ля

Alexander
27.08.2017
18:24:42
хак это unsafeCoerce

вот это действтиельно хак

а то это варианты использования системы типов

причем являющиеся её частью

как сказать, что интерфейсы это хак системы типов явы

Ilya
27.08.2017
18:25:48
Ну если бы были вложенные типы (вместо классов), то это бы не потребовалось

Alexander
27.08.2017
18:26:20
с чего бы вдруг?

Ilya
27.08.2017
18:27:33
с чего бы вдруг?
Ну скажем можно было бы указать конкретный тип 'a', а именно Show или Num или че там нам надо делать с элементами этого гетерогенного списка

Alexander
27.08.2017
18:27:40
тем более если бы были вложенные типы, то не работало бы все остальное

почему?

в смысле как

Ilya
27.08.2017
18:29:16
Указать максимально общий тип, который нам нужен

Конкретный

Alexander
27.08.2017
18:29:44
у тебя это data Foo x = forall Foo x . Foo - говорит о том, что словарь для Foo для типов нужен в рантайме

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