| // compile |
| |
| // Copyright 2024 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 p |
| |
| type Iterator[A any] func() (bool, A) |
| |
| type Range[A any] interface { |
| Blocks() Iterator[Block[A]] |
| } |
| |
| type Block[A any] interface { |
| Range[A] |
| } |
| |
| type rangeImpl[A any] struct{} |
| |
| func (r *rangeImpl[A]) Blocks() Iterator[Block[A]] { |
| return func() (bool, Block[A]) { |
| var a Block[A] |
| return false, a |
| } |
| } |
| |
| func NewRange[A any]() Range[A] { |
| return &rangeImpl[A]{} |
| } |
| |
| type AddrImpl struct{} |
| |
| var _ = NewRange[AddrImpl]() |