> > I believe the fancy academic name for what we're discussing here is > "lenses", and I agree that they'd be very useful. I currently use a > user-space wrapper like so: > > function prop(string $prop): \Closure > { > return static fn (object $o): mixed => $o->$prop; > } > > function method(string $method, ...$args): \Closure > { > return static fn (object $o): mixed => $o->$method(...$args); > } > > Which lets me do this: > > $parentNames = pipe($vals, > amap(method('getParent')), > amap(prop('name')), > );
But I really don't like the stringy method and property names. That sure does it, but not that type safe though. The T_BLING (that is the only name I will allow for $$) marker has been > discussed on and off a few times over the years, I think first in Sara's > original pipes proposal many years ago. I was actually going to suggest > the same in this thread before I saw you did. :-) > Yes I found it. Actually there were many discussions about it. I didn't really went through them, but how had it never made through? (I'll take time to read through ofc) > More abstractly, $$ meaning "the only obvious value in context" has > potential, but also risk, because "obvious" is not always obvious. I do > think it's an area to explore, though, and would definitely help with > functional style code that relies heavily on closures. > I'm not sure I understand how this could not be "always obvious". IF, - let's say we stick to what hacklang has: https://docs.hhvm.com/hack/expressions-and-operators/pipe - I think it's farily straightforward $a = $obj->getConfig() |> array_map($foo => $foo->getId(), $$) |> array_filter($foo => $foo !== "woof", $$) |> $this->toResponse($bar, $$, $baz); But to get back to the original topic: I think this is what you were looking for. Zoltán Fekete