@haskellru

Страница 1423 из 1551
A64m
24.08.2018
13:45:22
ссылка выше, только там пост старый, так что EitherT вместо ExceptT

Denis
24.08.2018
13:46:48
зачем оборачивать в newtype? хватит и break :: forall m r a. Monad m => r -> ExceptT r m a break = throwError loop :: forall r m. Monad m => ExceptT r m Unit -> m r loop = either pure pure <=< runExceptT . forever

Alexander
24.08.2018
13:52:38
@A64m_qb0 а если у меня есть Maybe x, и (x->Either y z) и y как это объединить?

mx ^? _Just . to(Right . f) . non (Left y) // f :: x -> z

Google
Alexander
24.08.2018
13:53:25
чуть с типами наврал

на non отвативается

A64m
24.08.2018
13:54:53
я что-то не понял зачем Right и non

Alexander
24.08.2018
13:55:29
мне нужно на выходе Either

в общем у меня из Maybe a -> Either Text x и с преобразованиями внутри

A64m
24.08.2018
13:56:42
ну тут не ^? тогда должен быть

т.е. mx ^? _Just . to f будет Maybe z

Alexander
24.08.2018
13:57:58
ок, как сделать из Maybe z , z

я думал non для этого, чтобы значение дать в случае Nothing

kana
24.08.2018
13:59:38
существует HFunctor вида class HFunctor hf where hfmap :: forall g h. (g ~> h) -> (hf g ~> hf h) я вот думаю какой должен быть тогда HBifunctor class HBifunctor hb where hbimap :: (f ~> f') -> (g ~> g') -> (hb f g ~> hb f' g') правильно?
class Functor (cat :: obj -> obj -> Type) (f :: obj -> obj) where map :: (a `cat` b) -> (f a `cat` f b) class BiFunctor cat f where bimap :: (a `cat` b) -> (c `cat` d) -> (f a c `cat` f b d) instance Functor (->) Maybe where map = Prelude.fmap instance Functor (->) [] where map = Prelude.fmap instance BiFunctor (->) (,) where bimap = Prelude.bimap newtype f ~> g = Nat (forall a. f a -> g a) newtype Apply f a = Apply (f a) instance Functor (~>) Apply where map (Nat f) = Nat (\(Apply x) -> Apply (f x)) newtype (f <+> g) a = Plus (Either (f a) (g a)) instance BiFunctor (~>) (<+>) where bimap (Nat f) (Nat g) = Nat $ \(Plus x) -> Plus (either (Left . f) (Right . g) x)

Alexander
24.08.2018
13:59:39
(бесит когда только линзоапи есть)

kana
24.08.2018
13:59:40
обобщил

A64m
24.08.2018
14:01:01
я думал non для этого, чтобы значение дать в случае Nothing
оно так и сделает, не в том же конвейере просто

Google
A64m
24.08.2018
14:01:50
(foo ^? _Just . to (Right . f)) ^. non (Left bar)

Alexander
24.08.2018
14:02:35
а

A64m
24.08.2018
14:02:39
но to портит конвейер в любом случае, так что можно не стараться один делсть

если б не to а нормальня призма отавалась было бы что-то вроде matching (_Just . _f) & _Left .~ "my error message"

kana
24.08.2018
14:07:50
а теперь как бифунктор написать для) data MonadF f g a = DoneM a | MoreM (f (g a))
а никак, тут же требуется чтобы f был функтором

Alexander
24.08.2018
14:08:09
да это опять jose

kana
24.08.2018
14:08:16
а для этого нужно наложить констрейт на эта-редуцированную переменную

Alexander
24.08.2018
14:08:18
там недолинзы

Lens lala (Maybe roror)

A64m
24.08.2018
14:08:45
но я не удивлюсь, если сущестует похожий нормальный способ сообщение об ошибке к Maybe приделывать, я просто его не знаю/не помню

Alexander
24.08.2018
14:08:53
написал как-то

в errors было ??

но там оно к EitherT привязано

можно ещё в .to(maybe ..) завернуть

A64m
24.08.2018
14:10:48
Lens lala (Maybe roror)
это вообще не линзы, зачем они такой ужас делают, там же наверняка где-то потом можнго нарваться на проблемы из-за беззаконности

Alexander
24.08.2018
14:11:21
я могу высказать предположение

но оно будет непопулярным

сейчас сформулирую как-нибудь похуже

Google
Alexander
24.08.2018
14:11:58
дело в том, что сейчас модно писать хорошие хаддоки

с примерами и т.п.

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

базовом

а так не используется

и все плевать, что там работает, а что нету, за мелким юзкейсом

Ilya
24.08.2018
14:13:53
ссылка выше, только там пост старый, так что EitherT вместо ExceptT
Можно ещё сделать через Alternative. Монада та же самая, ExceptT. Только теперь throwError будет использоваться не как break, а наоборот как continue. loop :: ExceptT () (State Int) () loop = msum $ repeat $ do modify succ st <- get when (st < 10) $ throwError () λ> execState (runExceptT loop) 0 10

kana
24.08.2018
14:14:47
это то понятно
data MonadF f g a where DoneM :: a -> MonadF f g a MoreM :: Functor (->) f => f (g a) -> MonadF f g a часть проблемы решается gadt

осталось только решить ее в ~>

как вариант - повесить на ~> констрейт тоже

A64m
24.08.2018
14:15:56
только вот я подозреваю, что гонзалес зря топит против континьюэйшонов, на них быстрее из циклов выходить, что, когда дело с циклами имеем, довольно важно обычно

(подозреваю в том числе, что быстрее, сам я не проверял)

Alexander
24.08.2018
14:22:35
++

а ещё бесит что в jose все криптография в EitherT IO

как-то уж крестик или трусы

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

Kirill
25.08.2018
06:36:28
@qnikst а для сишки же вроде c2hs был самым внятным?

Admin
ERROR: S client not available

Alexander
25.08.2018
06:40:51
hsc2hs + inline-c

ну или просто hsc2hs + расширение для FFI

Google
Kirill
25.08.2018
06:42:28
т.е. c2hs так себе? в генте из-за него xmonad-extras протух прост, ну ок

Alexander
25.08.2018
06:42:46
там багм

баги вечные

Kirill
25.08.2018
19:21:25
ха, оказалось, что баг c2hs лечится апгрейдом GCC до семёрки...

Terminator
25.08.2018
23:57:04
@stsgu будет жить. Поприветствуем!

@Dim_As_YP будет жить. Поприветствуем!

Maxim
26.08.2018
17:03:44
Неужели они опять

A64m
27.08.2018
09:22:07
What's the consensus on Unicode symbols these days? 53 комментария

Dmitry
27.08.2018
09:23:16
На китайском?

A64m
27.08.2018
10:31:19
фича гхц за которую я так переживал, только начала себя оправдывать, а ее уже хотят опять откатить Constant folding optimises 1 into 3 https://ghc.haskell.org/trac/ghc/ticket/15569

Alexander
27.08.2018
10:37:51
нормальная оптимизация

kana
27.08.2018
10:45:46
возможно это хорошее место для прувера или тупо тестов

milana
27.08.2018
11:04:24
Может вопрос немного не в тему, но уверена, что народ шарит: в лямбда-исчислении рекурсия вводится через пляски с комбинатором неподвижной точки и тд. Зачем? В смысле, нельзя ли просто определить терм через самого себя, иными словами - вызвать функцию в ней же самой? Есть ли какие-нибудь причины, делающие это бессмысленным бредом?

Index
27.08.2018
11:05:49
Скоуп

В лямбда-исчислении нет let, как функция обратится к самой себе?

Y-комбинатор это и есть способ для тёрма сослаться на самого себя

milana
27.08.2018
11:11:32
"До" Y-комбинатора никакой рекурсии не существовало?

Darwin
27.08.2018
11:13:47
"До" Y-комбинатора никакой рекурсии не существовало?
Само по себе лямбда-исчисление это способ формализовать идею вычисления (вычислимости), определить понятия, в том числе рекурсию

Google
Darwin
27.08.2018
11:14:28
Рекурсия «до» — неформальный термин

milana
27.08.2018
11:15:21
А после этого - строго формализованный. Спасибо

(\x. ??? x) вот что тут поставить вместо ??? чтобы вызвать эту же лямбду?
Абстрагироваться по f (\f x. f x) и скормить её (\ f. f f) ?

kana
27.08.2018
11:23:20
Абстрагироваться по f (\f x. f x) и скормить её (\ f. f f) ?
ну так это уже частично комбинатор неподвижной точки же

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