Comments (9)
Reason is, that depending on the Traversable implementation passed to map() I don't necessary know how to create the same Traversable (obviously). The reasons for "always return an array" are simplicity and consistency.
from functional-php.
That said, if you have a good idea how to change that behavior, I would be very interested.
from functional-php.
Is there a reason you would have to return the same kind of Traversable
?
from functional-php.
That’s true, could be anything like an ArrayIterator. But that would only add runtime costs so I am not sure how useful it would be. Also given that the PHP APIs like array_keys() and so on take, well, arrays, also returning arrays feels like the lowest common denominator.
from functional-php.
Here is a simple example that illustrates why returning an iterator performs better for some uses; admittedly I am not sure if the example is perfectly compatible with this repo but you should understand it:
$data = new ArrayIterator(range(0, 1000)); //realistically obtained from somewhere else.
limit(map($data, function($value) { return 2 * value;}), 4);
If you return a lazy iterator you only have to map 4 values; if you return an array you have to map all 1000 values and then limit the top 4.
To be clear, I'm not arguing that you should change, I was mostly curious why you didn't take this approach as most functional languages use lazy evaluation for their utility functions like this.
from functional-php.
Very good example and I agree there are cases where it would work better. What Functional PHP could offer is set of functions under a different namespace that always returns iterators. Let me think a little more about it, any input is of course appreciated and thanks for the discussion so far.
from functional-php.
FYI there is also nikic/iter that always returns lazy iterators.
from functional-php.
Yep, a very nice library.
from functional-php.
Closing issue for now.
from functional-php.
Related Issues (20)
- Flatten array performance HOT 6
- PHP 7? HOT 3
- functional shortcut for array_reduce? HOT 1
- Write docs for converge()
- Porper file comment instead of full license text HOT 1
- The opposite of `select_keys` HOT 2
- Support psalm HOT 10
- Let the default callback argument to function some, none, and every be the identity function HOT 4
- Support .phpstorm.meta
- pick should use array_key_exists instead of isset HOT 3
- Make these functions more expressive HOT 3
- Functions can no longer be called `match` on PHP 8
- [BUG] 1.14.0 breaks when opcache.preload is enabled HOT 1
- PHP 8 Support HOT 3
- Proposal: Add compact() HOT 3
- When will the php v8 be supported? HOT 3
- Use php-quickcheck for testing
- `take_left(sequence_linear(date('Y') - 3, 1), 3)` infinite loop
- Add iterable to the method definitions
- Tail Recursion does not work HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from functional-php.