Initial commit: Go 1.23 release state
This commit is contained in:
75
test/typeparam/issue50486.dir/goerror_fp.go
Normal file
75
test/typeparam/issue50486.dir/goerror_fp.go
Normal file
@@ -0,0 +1,75 @@
|
||||
// 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 goerror_fp
|
||||
|
||||
type Seq[T any] []T
|
||||
|
||||
func (r Seq[T]) Size() int {
|
||||
return len(r)
|
||||
}
|
||||
|
||||
func (r Seq[T]) Append(items ...T) Seq[T] {
|
||||
tail := Seq[T](items)
|
||||
ret := make(Seq[T], r.Size()+tail.Size())
|
||||
|
||||
for i := range r {
|
||||
ret[i] = r[i]
|
||||
}
|
||||
|
||||
for i := range tail {
|
||||
ret[i+r.Size()] = tail[i]
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (r Seq[T]) Iterator() Iterator[T] {
|
||||
idx := 0
|
||||
|
||||
return Iterator[T]{
|
||||
IsHasNext: func() bool {
|
||||
return idx < r.Size()
|
||||
},
|
||||
GetNext: func() T {
|
||||
ret := r[idx]
|
||||
idx++
|
||||
return ret
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type Iterator[T any] struct {
|
||||
IsHasNext func() bool
|
||||
GetNext func() T
|
||||
}
|
||||
|
||||
func (r Iterator[T]) ToSeq() Seq[T] {
|
||||
ret := Seq[T]{}
|
||||
for r.HasNext() {
|
||||
ret = append(ret, r.Next())
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (r Iterator[T]) Map(f func(T) any) Iterator[any] {
|
||||
return MakeIterator(r.HasNext, func() any {
|
||||
return f(r.Next())
|
||||
})
|
||||
}
|
||||
|
||||
func (r Iterator[T]) HasNext() bool {
|
||||
return r.IsHasNext()
|
||||
}
|
||||
|
||||
func (r Iterator[T]) Next() T {
|
||||
return r.GetNext()
|
||||
}
|
||||
|
||||
func MakeIterator[T any](has func() bool, next func() T) Iterator[T] {
|
||||
return Iterator[T]{
|
||||
IsHasNext: has,
|
||||
GetNext: next,
|
||||
}
|
||||
}
|
||||
16
test/typeparam/issue50486.dir/main.go
Normal file
16
test/typeparam/issue50486.dir/main.go
Normal file
@@ -0,0 +1,16 @@
|
||||
package main
|
||||
|
||||
import fp "./goerror_fp"
|
||||
|
||||
func Fold[A, B any](zero B, a A, f func(B, A) B) B {
|
||||
return f(zero, a)
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
var v any = "hello"
|
||||
Fold(fp.Seq[any]{}, v, func(seq fp.Seq[any], v any) fp.Seq[any] {
|
||||
return seq.Append(v)
|
||||
})
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user