abstract type AbstractTask end abstract type AbstractComputeTask <: AbstractTask end abstract type AbstractDataTask <: AbstractTask end struct DataTask <: AbstractDataTask data::UInt32 end # S task with 1 child struct ComputeTaskS1 <: AbstractComputeTask end # S task with 2 children struct ComputeTaskS2 <: AbstractComputeTask end # P task with 0 children struct ComputeTaskP <: AbstractComputeTask end # v task with 2 children struct ComputeTaskV <: AbstractComputeTask end # u task with 1 child struct ComputeTaskU <: AbstractComputeTask end struct FusedComputeTask{T1<:AbstractComputeTask, T2<:AbstractComputeTask} <: AbstractComputeTask end