pub type simulate<M: MathsCore + Sync, H: Habitat<M> + RustToCuda + Sync, G: PrimeableRng<M> + RustToCuda + Sync, S: LineageStore<M, H> + RustToCuda + Sync, X: EmigrationExit<M, H, G, S> + RustToCuda + Sync, D: DispersalSampler<M, H, G> + RustToCuda + Sync, C: CoalescenceSampler<M, H, S> + RustToCuda + Sync, T: TurnoverRate<M, H> + RustToCuda + Sync, N: SpeciationProbability<M, H> + RustToCuda + Sync, E: MinSpeciationTrackingEventSampler<M, H, G, S, X, D, C, T, N> + RustToCuda + Sync, I: ImmigrationEntry<M> + RustToCuda + Sync, A: SingularActiveLineageSampler<M, H, G, S, X, D, C, T, N, E, I> + RustToCuda + Sync, ReportSpeciation: Boolean, ReportDispersal: Boolean> = impl Fn(&mut Launcher<'_, '_, simulate<M, H, G, S, X, D, C, T, N, E, I, A, ReportSpeciation, ReportDispersal>>, &PtxJit<DeepPerThreadBorrow<Simulation<M, H, G, S, X, D, C, T, N, E, I, A>>>, &mut PtxJit<DeepPerThreadBorrow<ValueBuffer<Lineage, true, true>>>, &mut PtxJit<DeepPerThreadBorrow<EventBuffer<ReportSpeciation, ReportDispersal>>>, &mut PtxJit<DeepPerThreadBorrow<ValueBuffer<SpeciationSample, false, true>>>, &mut PtxJit<DeepPerThreadBorrow<ValueBuffer<PositiveF64, false, true>>>, &ShallowInteriorMutable<AtomicU64>, &ShallowInteriorMutable<AtomicU64>, PerThreadShallowCopy<u64>, PerThreadShallowCopy<NonNegativeF64>);