Size: a a a

PureScript — русскоговорящее сообщество

2019 January 29

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Там не кот, а cata
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Теперь хочу написать general zipWith
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Через те призмы что я выше показал + zipCata
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
А пока я написал вам про интересные штуки, а сам пойду пилить круды на ноде)
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Vladimir Klntsky
Мне это нужно чтобы писать алгоритмы, которые используют uncons и при этом не писать отдельные реализации для каждой структуры данных.
Они будут тут -> https://github.com/8084/purescript-list-utils
В ридми unconsable я указал единственный use-case помимо этого, который смог придумать. Ну и да, я понимаю, что pursuit - не npm, но в данном случае вынесение этого в отдельный пакет оправдано.

Мимоавтор.
Что сюда будет включено? Мб все можно правильно обобщить не только на списки
источник

VK

Vladimir Klntsky in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
Что сюда будет включено? Мб все можно правильно обобщить не только на списки
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Зачем тебе деревянная свёртка?
источник

VK

Vladimir Klntsky in PureScript — русскоговорящее сообщество
В другом месте она называется balanced fold
Мне лично эта свёртка нужна чтобы использовать её в https://github.com/8084/purescript-difference-containers
Будет нечно похожее по духу на DList, только работающее с теми структурами данных, для которых временная сложность append зависит линейно как от размера первого аргумента,  так и от размера второго.
Сложность левой или правой свёртки для таких структур - O(n^2), балансированной - O(n * log(n)).
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Vladimir Klntsky
В другом месте она называется balanced fold
Мне лично эта свёртка нужна чтобы использовать её в https://github.com/8084/purescript-difference-containers
Будет нечно похожее по духу на DList, только работающее с теми структурами данных, для которых временная сложность append зависит линейно как от размера первого аргумента,  так и от размера второго.
Сложность левой или правой свёртки для таких структур - O(n^2), балансированной - O(n * log(n)).
Зачем тебе это пакет?
источник

VK

Vladimir Klntsky in PureScript — русскоговорящее сообщество
Моя выпускная работа будет где-то около этого.
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Кстати тут тоже про деревянную свёртку есть https://wiki.haskell.org/Fold
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Vladimir Klntsky
Моя выпускная работа будет где-то около этого.
В универе?
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
@klntsky
simply :: forall p s a r. (L.Optic' p s a -> r) -> L.Optic' p s a -> r
simply = identity
источник

VK

Vladimir Klntsky in PureScript — русскоговорящее сообщество
Хорошее, но решает другую задачу. Если использовать FMList в вычислениях, где интенсивно применяется append, а потом конвертировать FMList в обычный список поэлементно и свернуть, выигрыша не будет. Вернее, это зависит от того, _как_ свернуть.
Какая структура данных будет использоваться для накопления результата - не очень важно, это может быть любой вариант church encoded списка с O(1) append. Или даже простой список, если append будет только слева.
> В универе?
Да.
источник

VK

Vladimir Klntsky in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
@klntsky
simply :: forall p s a r. (L.Optic' p s a -> r) -> L.Optic' p s a -> r
simply = identity
Спасибо.
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Vladimir Klntsky
Хорошее, но решает другую задачу. Если использовать FMList в вычислениях, где интенсивно применяется append, а потом конвертировать FMList в обычный список поэлементно и свернуть, выигрыша не будет. Вернее, это зависит от того, _как_ свернуть.
Какая структура данных будет использоваться для накопления результата - не очень важно, это может быть любой вариант church encoded списка с O(1) append. Или даже простой список, если append будет только слева.
> В универе?
Да.
опять же, эти все лево/право хороши для лейзи (гда санки не форсируются)
источник

VK

Vladimir Klntsky in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
class Cons s t a b | s -> a, t -> b, s b -> t, t a -> s where
 _Cons :: L.Prism s t (Tuple a s) (Tuple b t)

class Snoc s t a b | s -> a, t -> b, s b -> t, t a -> s where
 _Snoc :: L.Prism s t (Tuple s a) (Tuple t b)
Если конкретизировать Cons для List, получается

_Cons :: forall p. Choice p =>
     p (Tuple a (List a)) (Tuple a (List a)) ->
     p (L.List a) (List a)


Зачем там Choice?
источник

VK

Vladimir Klntsky in PureScript — русскоговорящее сообщество
Похоже, функцию с таким типом невозможно написать.

class Cons s t a b | s -> a, t -> b, s b -> t, t a -> s where
 _Cons :: L.Prism s t (Tuple a s) (Tuple b t)

simply :: forall p s a r. (L.Optic' p s a -> r) -> L.Optic' p s a -> r
simply = identity

consDefault :: forall s a. Cons s s a a => a -> s -> s
consDefault = curry (simply L.review _Cons)

instance consList :: Cons (List a) (List a) a a where
 -- _Cons :: forall p. Choice p =>  p (Tuple a (List a)) (Tuple a (List a)) -> p (List a) (List a)
 _Cons = undefined
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
для листа нельзя написать?)
источник