Я пишу библиотеку AST для простого «динамически типизированного» языка. Я написал свое синтаксическое дерево и парсер. Теперь я работаю над управлением АСТ, и я заинтересован в использовании пакета объективов для этой цели.Список Haskell и Control.Lens
Рассмотрим
data Obj = Obj !(Map Text Obj)
| Arr ![Obj]
Я могу написать объектив для манипулирования полями объекта довольно легко:
field t (Obj m) = m^.at t
field _ _ = Nothing
, но я понятия не имею, где начать для манипулирования элементами приб. Я хотел бы линзу вдоль линий:
arrIx :: Int -> Obj -> Maybe Obj
arrIx i (Arr objs) = objs^.someLensHere i
where someLensHere i = undefined
Я изменю мое представление Obj для целесообразности, но он все равно будет полезно знать, как индекс в списках с помощью линзы.
Супер! Спасибо. – nomen