лайф очереди как оптика - PullRequest
       55

лайф очереди как оптика

1 голос
/ 03 февраля 2020

Рассмотрим список элементов [a] и пару функций

pop :: [a] -> (Maybe a, [a])
pop = headMay &&& tailSafe

push :: a -> [a] -> [a]
push = (:)

, которые просто предоставляют в список структуру очереди «последний пришел - вышел».

Я могу ошибаться , но API этого ощущается очень lens y, предоставляя способ доступа к первому элементу списка. Тем не менее, это не Lens и не Prism.

Мне было интересно, что это может быть реализовано как Traversal или какая-либо другая структура оптики

1 Ответ

1 голос
/ 03 февраля 2020

Нажатие и выталкивание в начале списка может быть выражено в виде призмы - от [a] до (a, [a]) и от (a, [a]) до [a]. Это существует в lens как _Cons:

_Cons @[a] @[b] :: Prism [a] [b] (a, [a]) (b, [b])

(Это только расходится с вашим API, прямо исключая получение непустого списка, но не элемент из pop, поскольку (Maybe a, [a]) тип результата, в принципе, позволил бы.)

...