What d be awesome is that the stream like interface 
i have bee thinking about provides a convert method,
so it can answer to this question

given []string how to move on to []int, or,

[]stream.Map(...) -> give me the length of each string

So if the interface contains a magic signature like this,
<inputType>Conv( conv(<inputType>)<outputType>, sink<outputType>) 
sink<outputType>

It s possible to write,

[]stream.Map(...).Conv(strToLen, []int{}).Sum()

where 
strToLen := func(s string) int { return len(s) }

which, for the fun, could be turned into

strLen := conv(func(v string) int, len)
[]stream.Map(...).Conv(strLen, []int{}).Sum()
// twice conv looks not so good.

On Tuesday, May 30, 2017 at 8:26:35 PM UTC+2, mhh...@gmail.com wrote:
>
> one more case where conv d be awesome,
>
>
> with 
> fnUtils.InputParams() ParamSlice
>
> Where 
> ParamSlice []struct{Name,Type string}
>
> With little help, I can do stuff like
>
>             ctxFilter := astutil.FilterParamSlice.ByType(ctxCtx)
>             fnUtils.InputParams().Filter(ctxFilter).Map(func(p 
> astutil.Param) astutil.Param {
>                 ...
>                 return p
>             })
>
> that works, but its not the best factorization possible,
>
> let say the language provide a construct 
> - to make a getter of a type property
> - a deep eq func of a type
>
> such as an approximation would be
>
>             typeGet := get.(Param.Type) // func() string
>             strEq := conv(func(left func() string) func(right string) 
> bool, eq.(string))
>             ctxFilter := strEq(typeGet)
>
> in short
> - make a getter of Param.type => func()string
> - convert string.eq from func(s,s) to a string consumer 
>      => strEq := func(left func() string) func(right string) bool
> - create the value eqer, of a value getter,
>     => ctxFilter := strEq(typeGet)
>
> then pass it to a stream/array like data structure (to be defined)
>
> the provider can provides struct only, 
> and the declarer has more ways to handle the declared api.
>
> On Tuesday, May 30, 2017 at 5:14:57 PM UTC+2, mhh...@gmail.com wrote:
>>
>> I just realized what d be awesome is that the language 
>> does not only provide boiler plate []basicType enhanced types,
>> but provides streamed version of them,
>> that d be much better.
>>
>> when you do 
>> [15Million]string.map().filter().count().
>>
>> with a naive implementation over array of those intents,
>> you effectively end up with a copy at each stage,
>> which is not cool.
>>
>> Instead if that d be a stream api, 
>> that d be almost same call, with small changes to be determined, 
>> but a much better allocation,
>> as each item is processed once by each function, one item at a time,
>> you don t need the intermediate (stupid, after all) arrays.
>>
>> [15Million]string.map().filter().count().
>>
>> The difference being 
>> that some func call must become terminal, count() int
>> some must probably become contiguous to <something to be decided by the 
>> user>, filter() stream
>>
>> can this help to reduce over multiple goroutine?
>>
>> something like ?
>> [15Million]string.chunks(size int, concurrent int).Parrallel(receiver 
>> []string{}.filter() stream).count().
>>
>> count is sequential, it receives results from // filters, 
>> receiver is a worker space (memory+work) aka what a stream ? a []string ?,
>>
>> so ParrallelChunk is (input stream/[]string) stream/[]string
>>
>> why not ?
>>
>> On Tuesday, May 30, 2017 at 4:43:54 PM UTC+2, mhh...@gmail.com wrote:
>>>
>>> I m just gonna add more examples as it come,
>>>
>>> from
>>>             hasPrefix := func(prefix string) func(string) bool {
>>>                 return func(s string) bool { return strings.HasPrefix(s, 
>>> prefix) }
>>>             } // this is not cool....
>>>
>>>             if fnUtils.AllTypes().Filter(hasPrefix("post")).NotEmpty() {
>>>                 ...
>>>             }
>>>
>>> to
>>>             hasPrefix, _ := conv(func(prefix string) func(s string) 
>>> bool, strings.HasPrefix)
>>>             // does this make sense given 
>>> https://golang.org/pkg/strings/#HasPrefix ? 
>>>
>>>             if fnUtils.AllTypes().Filter(hasPrefix("post")).NotEmpty() {
>>>                 ...
>>>             }
>>>
>>> On Friday, May 26, 2017 at 2:47:45 PM UTC+2, mhh...@gmail.com wrote:
>>>>
>>>> oops... mistake in it.
>>>>
>>>>
>>>> printS, err := conv(func(s string, err error), fmt.Println) or 
>>>> panic(err)
>>>> _, err := []string{"hello}.Map(strings.
>>>> ToUpper).MustEach(printS) or panic(err)
>>>>
>>>> count, err := conv(func(s string) n int, fmt.Println) or panic(err)
>>>> n := []string{"hello}.Map(strings.ToUpper).Sum(count)
>>>>
>>>> count, err := conv(func(s string) (n int, err error), fmt.Println) or 
>>>> panic(err)
>>>> n, err := []string{"hello}.Map(strings.ToUpper).MustSum(count) or 
>>>> panic(err)
>>>>
>>>> more like this, take advantage of return type and names to do more 
>>>> conversion.
>>>>
>>>> On Friday, May 26, 2017 at 2:45:33 PM UTC+2, mhh...@gmail.com wrote:
>>>>>
>>>>> or this,
>>>>>
>>>>> printS, err := conv(func(s string, err error), fmt.Println) or 
>>>>> panic(err)
>>>>> _, err := []string{"hello}.Map(strings.ToUpper).MustEach(printS) or 
>>>>> panic(err)
>>>>>
>>>>> count, err := conv(func(n int), fmt.Println) or panic(err)
>>>>> n := []string{"hello}.Map(strings.ToUpper).Sum(count)
>>>>>
>>>>> count, err := conv(func(n int, err error), fmt.Println) or panic(err)
>>>>> n, err := []string{"hello}.Map(strings.ToUpper).MustSum(count) or 
>>>>> panic(err)
>>>>>
>>>>> that'd be great...
>>>>>
>>>>> On Friday, May 26, 2017 at 2:25:37 PM UTC+2, mhh...@gmail.com wrote:
>>>>>>
>>>>>> for the fun, 
>>>>>>
>>>>>> I want to write
>>>>>> []string{"hello}.Map(strings.ToUpper).Each(fmt.Println)
>>>>>>
>>>>>> would not work, func param are incompatible.
>>>>>>
>>>>>> let s apply static rules to convert it,
>>>>>>
>>>>>> printS, err := conv(func(s string), fmt.Println) or panic(err)
>>>>>> []string{"hello}.Map(strings.ToUpper).Each(printS)
>>>>>>
>>>>>> Now it s possible.
>>>>>>
>>>>>> And if one does a fmt.MustPrintln to get ride of the error while 
>>>>>> still handling it (recoverable)
>>>>>> rather than ignore it as of today, 
>>>>>> you can write that, and handle error via recover, 
>>>>>> or simply ignore it as in the previous ex.
>>>>>>
>>>>>> printS, err := conv(func(s string), fmt.MustPrintln) or panic(err)
>>>>>>
>>>>>> []string{"hello}.Map(strings.ToUpper).Each(printS)
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wednesday, May 24, 2017 at 9:52:27 AM UTC+2, mhh...@gmail.com 
>>>>>> wrote:
>>>>>>>
>>>>>>> see the title, only for what s needed 
>>>>>>> Slice/Splice/Each/Map/First/Last/Reverse/Sort ect ect not len, for 
>>>>>>> reason. 
>>>>>>> so interface system serves the userland by its definition of struct, 
>>>>>>> and 
>>>>>>> the basic slice type provided by the language is fully operational, 
>>>>>>> without 
>>>>>>> breaking, btw. i don t go further in evaluation, i leave that to the 
>>>>>>> reader, just trying to work decently.
>>>>>>>
>>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to