jaror, Lenses are not always better:
fresh :: FDState s c -> (Int, FDState s c) fresh = id &&& id >>> first (^. nextId) >>> ((i, s) -> (i, s & alive %~ Set.insert i)) >>> second (nextId %~ (+ 1))
fresh :: FDState s c -> (Int, FDState s c) fresh s@FDState {_nextId = i, _alive = as} = (i, s {_nextId = i + 1, _alive = Set.insert i as})
Add comment