ужасно, теперь переписал на линзы стало чуть лучше, но может это ещё не предел? Я просто только первый раз линзы использую
re1 :-> re2 -> do
nfa1 <- toNFA re1
modify succ
nfa2 <- toNFA re2
return
NFA
{ _start = nfa1 ^. start,
_moves =
(nfa1 ^. moves)
`deepUnion` (nfa2 ^. moves)
`deepUnion` movesFromSet
( nfa1 ^. terminals . to (S.map (`EMove` (nfa2 ^. start)))
),
_terminals = nfa2 ^. terminals
}
Особенно to (S.map ...) — кажется, тут должно быть что-то более красивое
S — это что?
вроде объединить to Set.map нельзя, но можно вынести и просто применить как функцию, тогда to не нужно (nfa1 ^. moves) `deepUnion` (nfa2 ^. moves) `deepUnion` movesFromSet (S.map (`EMove` (nfa2 ^. start)) $ nfa1 ^. terminals) или movesFromSet (nfa1 ^. terminals & S.map (`EMove` (nfa2 ^. start)))
Да, так у меня и было. Потом нашёл setmapped setmapped %~ (`EMove` (nfa2 ^. start)) $ nfa1 ^. terminals и решил, что может это как-то можно лучше объединить с линзами
Очень много элементарных линз. Нахрена?..
Лучше сматчить поля напрямую?
S.map наверное можно заменить на each
Обсуждают сегодня