// run // Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main type TaskInput interface { deps() []*taskDefinition } type Value[T any] interface { metaValue } type metaValue interface { TaskInput } type taskDefinition struct { } type taskResult struct { task *taskDefinition } func (tr *taskResult) deps() []*taskDefinition { return nil } func use[T any](v Value[T]) { _, ok := v.(*taskResult) if !ok { panic("output must be *taskResult") } } func main() { tr := &taskResult{&taskDefinition{}} use(Value[string](tr)) }