@haskellru

Страница 434 из 1551
Semion
25.09.2017
20:06:07
Хммм, тут, пожалуй немного в другом фишка

Хаскелл позволяет естественным образом строить категорные конструкции

Alexander
25.09.2017
20:06:51
у нас были, но нужно во Франции быть и я не знаю требований

Semion
25.09.2017
20:06:57
Это... красиво

Google
illiatshurotshka❄️
25.09.2017
20:11:07
жопы?

kana
25.09.2017
20:11:33
bottom

_|_

illiatshurotshka❄️
25.09.2017
20:12:11
оо крутая терминология

Alexander
25.09.2017
20:12:35
/me убил котика, извините

illiatshurotshka❄️
25.09.2017
20:13:11
стикеры запрещены?

kana
25.09.2017
20:16:08
Да, любой траверс будет линзой. Но не все функторы аппликативные

type Traversal' a b = forall f . Applicative f => (b -> f b) -> (a -> f a)

он может задать только такой f, который Applicative

как следствие этот же f автоматически будет и Functor

т.е. как следствие будет подходить для любой линзы

type Lens' a b = forall f . Functor f => (b -> f b) -> (a -> f a)

Google
Denis
25.09.2017
20:19:24
https://arstechnica.com/gadgets/2017/09/microsoft-quantum-toolkit/

Alexander
25.09.2017
20:20:56
@kana_sama и?

kana
25.09.2017
20:21:30
ну значит не каждая линза может быть траверсом, хоть все траверсы - линзы

Alexander
25.09.2017
20:22:13
да, я там криво сказал

ParkeT
25.09.2017
20:23:58
А как вы код форматируете в телеграме? :D

Alexander
25.09.2017
20:24:07
` <- вначале и вконце

три `

ParkeT
25.09.2017
20:24:25
Ого. спасибо

illiatshurotshka❄️
25.09.2017
20:24:53
>не отправлять pdf с кодом созданную с lstlistings

Alexander
25.09.2017
20:25:07
@kana_sama что такое линза, это функция которая для любого f подставленного пользователем делает (b -> f b) -> (a -> f b) испольщуя только ту информацию, что f это функтор

так?

kana
25.09.2017
20:25:58
хм, ну вручную мы f не подставляем, но это делают всякие over/view за нас, правильно?

Alexander
25.09.2017
20:26:13
что такое поэтому если мы говорим пользователю, что требуем от функции больше (Applicative) у нас все продолжает работать

Alexander
25.09.2017
20:26:39
ну да, очень плохой язык, но линза ничего не знает о типе f кроме того, что он функтор

@banana_is ?

Alexander
25.09.2017
20:32:14
если твоя функция подставляет f которая Applicative, как это требует Traversable, то такая функция автоматически работает и для Lens, которому нужен только Functor

kana
25.09.2017
20:33:01
Да, это понятно, если функция может работать как траверсабл, то он может работать и как линза

Google
Dmitry
25.09.2017
20:33:47
а что?

Alexander
25.09.2017
20:36:14
@jagajaga тогда уж ещё

там вопрос про стажировки

если у нас есть функция работающая как линза, то она будет работать как траверсабл

я это написал

обратное неверно!

Serghei
25.09.2017
20:37:53
мы с женой прям поржали

про _|_

kana
25.09.2017
20:38:29
черт, я же написал то же самое, что и ты в предпоследнем сообщении)

Serghei
25.09.2017
20:38:38
никогда бы в голову не пришла такая аналогия

Alexander
25.09.2017
20:38:51
@kana_sama давай что-нить попроще, type X a = forall Traversable f => a -> f a

kana
25.09.2017
20:38:53
а это один из переводов слова bottom

Alexander
25.09.2017
20:39:03
и реализация pure :: X a

Anton
25.09.2017
20:39:19
kana
25.09.2017
20:39:29
bottom ~ ass

Alexander
25.09.2017
20:39:32
и пусть есть type Y a = forall f . Functor f => a -> f a

pure не может быть типа Y a

Anton
25.09.2017
20:40:08
ну, а ascii-art _|_ вообще в приличном обществе не переведёшь

Google
Anton
25.09.2017
20:40:37
bottom - это в общем-то не ругательство

Alexander
25.09.2017
20:40:55
а теперь рассмотрим, type Z a = forall f . Functor f => f a -> f ()

kana
25.09.2017
20:41:03
стой

Alexander
25.09.2017
20:41:09
и fmap (const ()) :: Z a

стою

kana
25.09.2017
20:41:59
это из-за того, что значение справа от стрелки? Потом что будь это обычное значение, то все же ок, разве нет?

и пусть есть type Y a = forall f . Functor f => a -> f a

pure не может быть типа Y a

а теперь рассмотрим, type Z a = forall f . Functor f => f a -> f ()

Alexander
25.09.2017
20:42:42
@kana_sama да из-за этого

kana
25.09.2017
20:42:43
имея некий траверсабл, мы спокойно можем отправить его туда, где нужен функтор

Alexander
25.09.2017
20:42:48
да

хочешь я полный гист сделаю

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

kana
25.09.2017
20:43:16
но имея функцию, которая отдает траверсабл, мы не можем отравить ее туда, где нужна функция, которая отдает функтор

Alexander
25.09.2017
20:44:08
я не уверен, чот отдает/ждет терминология здесь точная, но направление вроде верное

kana
25.09.2017
20:44:13
не, я сейчас сам поэксперементирую. У меня есть некоое понимание контрвариативности в плане работы функторов, но нет такого же понимания на тайплкассов

Alexander
25.09.2017
20:47:17
{-# LANGUAGE RankNTypes #-} type X a = forall f . Applicative f => a -> f a type Y a = forall f . Functor f => a -> f a p :: X a p = pure -- q :: Y a -- q = p -- • Could not deduce (Applicative f) arising from a use of ‘pure’ type V a = forall f . Functor f => f a -> f () type W a = forall f . Applicative f => f a -> f () v :: V a v = fmap (const ()) w :: W a w = v

полный код

Google
kana
25.09.2017
20:49:45
Благодарю. Пока не щелкнуло, но почему не работает мне понятно

Так, слева от стрелки у нас негативная позиция, типы там контрвариантны. Справа положительная, там все ковариантно. f a тут именно справа...

когда у нас тип (a -> f a) -> (b -> f b)то a -> f a у нас в негативной позиции, а f a в положительной, значит f a в негативной (1 * (-1) = -1), аналогично f b в положительной. То есть у нас f сразу и в положительной позиции, и в отрицательной

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

Alexander
25.09.2017
21:38:17
я ничего не понимаю (всегда путаюсь в ко и контр-вариантности), но что-то мне подсказывает, что разница в

type X f = ... vs type X = forall f. ...

и важно где тут f относительно =

@kana_sama ^

kana
25.09.2017
21:46:20
капец

Alexander
25.09.2017
22:02:32
примерно так же как и с forall x . S x vs S (forall x. x)

здесь у нас случай аналогичный S (forall x.x)

kana
25.09.2017
22:07:37
нужно попробовать это как-то нарисовать

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

type Traversal' a b = forall f . Applicative f => (b -> f b) -> (a -> f a)

type Lens' a b = forall f . Functor f => (b -> f b) -> (a -> f a)

Alexander
25.09.2017
22:37:03
что ты понимаешь под юзер?

caller может

caller собственно это и делает подставляет Const и Identity

а линза работает для всех

kana
25.09.2017
22:46:04
так, caller это кто в нашем случае?

view/over/...?

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