move list_id into the monad explicitly so Program doesn't
break the abstraction