Size: a a a

2021 February 15

ЗП

Зигохистоморфный Пре... in Haskell
A64m AL256m qn I0
СПЖ линзохейтер просто
и тем не менее делал доклад про них)
источник

AA

A64m AL256m qn<co... in Haskell
да, это не помешало
источник

АК

Анатолий Кот... in Haskell
добрый день, я запутался в линзах, помогите.
Читаю вот это http://comonad.com/reader/2012/mirrored-lenses/ и почти вначале статьи:
or from a family of isomorphisms:

iso :: (a -> c) -> (d -> b) -> LensFamily a b c d
iso f g h a = fmap g (h (f a))

Почему пара (a -> c, d -> b) является изоморфизмом?
Те, я понимаю почему пара (to: a -> c, from: c -> a) является таковым - тк две функции можно связать условиями:
1. forall e: c. to (from e) == e
2. forall e: a. from (to e) == e
Но как что-то подбное можно сформулировать для (a -> c, d -> b)? У них же ведь типы никак не связанны.
источник

K

Kir in Haskell
Анатолий Кот
добрый день, я запутался в линзах, помогите.
Читаю вот это http://comonad.com/reader/2012/mirrored-lenses/ и почти вначале статьи:
or from a family of isomorphisms:

iso :: (a -> c) -> (d -> b) -> LensFamily a b c d
iso f g h a = fmap g (h (f a))

Почему пара (a -> c, d -> b) является изоморфизмом?
Те, я понимаю почему пара (to: a -> c, from: c -> a) является таковым - тк две функции можно связать условиями:
1. forall e: c. to (from e) == e
2. forall e: a. from (to e) == e
Но как что-то подбное можно сформулировать для (a -> c, d -> b)? У них же ведь типы никак не связанны.
Iso (Identity a) (Identity b) a b
источник

JS

Jerzy Syrowiecki in Haskell
Анатолий Кот
добрый день, я запутался в линзах, помогите.
Читаю вот это http://comonad.com/reader/2012/mirrored-lenses/ и почти вначале статьи:
or from a family of isomorphisms:

iso :: (a -> c) -> (d -> b) -> LensFamily a b c d
iso f g h a = fmap g (h (f a))

Почему пара (a -> c, d -> b) является изоморфизмом?
Те, я понимаю почему пара (to: a -> c, from: c -> a) является таковым - тк две функции можно связать условиями:
1. forall e: c. to (from e) == e
2. forall e: a. from (to e) == e
Но как что-то подбное можно сформулировать для (a -> c, d -> b)? У них же ведь типы никак не связанны.
это такой расширенный изоморфизм, чтобы, например, сначала A x превратить в B x, потом зайти внутрь x, поменять его на y, потом вернуться на уровень выше, к B y, и поменять его обратно на A y
источник

АК

Анатолий Кот... in Haskell
Kir
Iso (Identity a) (Identity b) a b
это частный случай, но работает ли это всегда? Те существует ли, к примеру, такой исо Iso [a] (Maybe b) a b зная функции [a] -> a, b -> Maybe b?
(интуитивно нет, но я не уверен какое отношение должно быть между s t a b, чтобы две функции являлись изоморфизмом)
источник

АХ

Алексей Худяков... in Haskell
Зигохистоморфный Препроморфизм
чего они пренебрегают готовыми конструкциями?
Традиция. Рекорды должны быть сломаны
источник

JS

Jerzy Syrowiecki in Haskell
Анатолий Кот
это частный случай, но работает ли это всегда? Те существует ли, к примеру, такой исо Iso [a] (Maybe b) a b зная функции [a] -> a, b -> Maybe b?
(интуитивно нет, но я не уверен какое отношение должно быть между s t a b, чтобы две функции являлись изоморфизмом)
корректной [a] -> a нет, но вообще почему нет?
источник

BK

Boris K in Haskell
Aleksei (astynax) Pirogov
Могу предположить, что хочется иметь некое "рабочее место", которое легко предсказуемым образом развернуть.
Имею предложить для этого два варианта:

1. IHaskell в виде Docker Image, при сборке которого можно добавить нужные пакеты. GUI классического не будет, но кое-какие элементы интерфейса можно отображать и в блокнотах, графики и изображения выводить в них же. Хороший вариант для "аналитического окружения", в котором нужно что-то читать из базы и строить диаграммы по результатам.

2. Vagrant. Оный создавался как способ получения рабочих окружений предсказуемым образом. Можно запускать Vagrant поверх докера или любой другой системы виртуализации вроде VirtualBox. И пусть Vagrant в основном предполагает использование терминала в созданном окружении, но подготовленные им виртуальные машины можно использовать и с графическим окружением. В таком виде Vagrant используют в образовательных заведения, когда нужно студентам обеспечить рабочие места на их же железе с ожидаемым зоопарком ОС — в этих случаях уже настроенный образ виртуальной машины просто выкладывают для скачивания и снабжают универсальной инструкцией по разворачиванию ("поставьте VirtualBox, поставьте Vagrant, скачайте образ, запускайте командодй").
Спасибо большое! О Vagrant подумаю, как о запасном варианте. Сейчас планирую попробовать скопировать Stack с библиотеками.
источник

АК

Анатолий Кот... in Haskell
Jerzy Syrowiecki
корректной [a] -> a нет, но вообще почему нет?
А как тогда обратное преобразование c from построить? Те должно выполняться
iso . from iso ≡ id
from iso . iso ≡ id
Те мы ведь не можем однозначно восстановить [a] из а.
источник

JS

Jerzy Syrowiecki in Haskell
Анатолий Кот
А как тогда обратное преобразование c from построить? Те должно выполняться
iso . from iso ≡ id
from iso . iso ≡ id
Те мы ведь не можем однозначно восстановить [a] из а.
[a] -> a мы тоже не можем.

но дело в другом.

в документации к библиотеке lens сказано, что

f . from f ≡ id
from f . f ≡ id


это законы. то есть если не выполняются эти условия, то построенный объект Iso не будет правильным изоморфизмом
источник

JS

Jerzy Syrowiecki in Haskell
короче, correct by construction нет
источник

к

кана in Haskell
Анатолий Кот
это частный случай, но работает ли это всегда? Те существует ли, к примеру, такой исо Iso [a] (Maybe b) a b зная функции [a] -> a, b -> Maybe b?
(интуитивно нет, но я не уверен какое отношение должно быть между s t a b, чтобы две функции являлись изоморфизмом)
такой iso будет просто незаконный бтв

iso интересен в своем определении

type Iso s t a b =
 forall p f. (Profunctor p, Functor f) =>
   p a (f b) -> p s (f t)

iso должен работать для любого профунктора, что не позволит делать никаких замыканий например, где можно сохранить часть значений, чтобы потом восстановить (поэтому не выйдет сделать [a] ~ Maybe a)

iso должен работать для любого функтора, что не позволит сделать 0 или 2 фокуса, строго 1
источник

к

кана in Haskell
есть еще более строкий случай

type Equality s t a b =
 forall p f.
   p a (f b) -> p s (f t)

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

K

Kir in Haskell
Анатолий Кот
это частный случай, но работает ли это всегда? Те существует ли, к примеру, такой исо Iso [a] (Maybe b) a b зная функции [a] -> a, b -> Maybe b?
(интуитивно нет, но я не уверен какое отношение должно быть между s t a b, чтобы две функции являлись изоморфизмом)
Нет, какой может быть изоморфизм между [] и Maybe?
источник

MK

Maxim Koltsov in Haskell
(x:_) <-> Just x
[] <-> Nothing
источник

АК

Анатолий Кот... in Haskell
Jerzy Syrowiecki
короче, correct by construction нет
да, у меня видимо с этим завтык был. я почему-то подумал, что должно быть какое-то ограничение на эти функции, которое просто не позволило бы построить невалидный исо/ но нужно самому следить за выполнением законов
источник

a

adam in Haskell
Maxim Koltsov
(x:_) <-> Just x
[] <-> Nothing
это не изоморфизм если че
источник

AL

Alexander Luzgarev in Haskell
Смотря в какой категории :)
источник

AK

Andrey Korostin in Haskell
Привет. Не подскажете, пожалуйста, есть в телеграмме чат с вакансиями с Haskell? Спасибо.
источник