HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
pflanze
functional-perl
Perl2014–2019
pflanze / functional-perl

functional-perl

Functional programming on Perl 5

2Distinct people
4Mentions
0Explicit recommenders
22GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Functional programming on Perl 5

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year4 dated mentions

Observed mentions: 2014-12-11 14:03:41 UTC to 2019-08-05 18:38:31 UTC.

0122014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20142015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20162017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2019

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC101
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC000
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC101
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC211

What Hacker News says

4 sources
I've written a script to allow me to filter the list, using the Functional Perl libraries. Maybe someone will translate it to JS? https://github.com/pflanze/functional-perl/blob/master/examp... If you want to run it: sudo apt-get install libfunction-parameters-perl libterm-readline-gnu-perl libpadwalker-perl git clone https://github.com/poteto/hiring-without-whiteboards git clone https://github.com/pflanze/functional-perl functional-perl/examples/hiring-without-whiteboards --help functional-perl/examples/hiring-without-whiteboards hiring-without-whiteboards/ E.g. to search for companies that offer remote jobs but not also jobs in London, UK: $cs->filter(fun($r) { $r->remote and not $r->locations->any(fun($l) { $l=~ /\bUK\b/ and $l=~ /london/i }) })->show_items Disclosure: I'm the author of the Functional Perl lib
Read the rest
raries.
In A listing of companies that don't do whiteboard job interviews
For those still interested in Perl 5: I've added a translation of the functional example from this article to the functional-perl project(1) here: https://github.com/pflanze/functional-perl/blob/master/examp... (1) http://functional-perl.org i.e. my $paths = stream(qw< /tmp /var/tmp >); my $filename = 'temp123'; my $ext = list(qw<pod pm pl>); my $existing_files = $paths->cartesian_product(list("/$filename."), $ext) ->map(*list_to_string) ->filter(unary_operator "-e");
In From Iterative to Functional Perl 6 Code (2012)
I've implemented lazy infrastructure / streams for Scheme, too, see: https://github.com/pflanze/chj-schemelib/blob/master/stream.... which is using https://github.com/pflanze/chj-schemelib/blob/master/lazy.sc... https://github.com/pflanze/chj-schemelib/blob/master/define-... and I've also implemented about the same in Perl here (work in progress): https://github.com/pflanze/functional-perl (which is used in http://ml2json.christianjaeger.ch/ .) Although I reimplemented the commonly used list processing functions (those from R5RS and part of those from SRFI 1) manually, I think the 'right thing' to do is to write an analyzer that is able to take the strict functions (the code from SRFI 1) and produce lazy variants; basically, a lazy sublanguage. I haven't gotten around doing that yet (it needs access to lexical code analyzis, and will want
Read the rest
to optimize so that only essential parts are delayed). (I know Racket implements a lazy sublanguage, so they must have done that.) Programming language implementations often retain references to memory a bit longer than necessary for running the programs written in that language (i.e. memory is not freed even though the program can't access it anymore), sometimes on purpose because it can help with introspection (debugging). Usually the assumption is that subexpressions or subroutine calls will return quickly and/or that the memory retained will not grow, both of which can be voided when using lazy sequences (the subexpression can take a long time, and on top of that, grow the stream whose head is being retained by the language implementation). This leads to leaking and potentially running out of memory, which I think is what SRFI 40 suffered from. I agree that SRFI 41 is very weird; I think it went to great contortions because of such language implementation issues--I'm still not totally sure, in any case the impression I got was that the SRFI 40/41 implementors didn't really completely understand what was going on. The post here says > Both SRFI 41 and lazy-seq don't have this problem. Now my guess is that lazy-seq doesn't suffer just because Chicken does not retain memory too long (for the cases that the author tested). The author doesn't tell whether he has tested SRFI 40 for leaking on Chicken, it might well not have leaked, either! On another note, I like how Scheme, like lisps in general, treats cons cells simply as pairs of any data type, not a sequence building block. Clojure does away with that generality, but at least buys interfaces (genericism for processing various kinds of sequences) and perhaps (I don't know in detail) better interoperation with Java in return. Scheme already has the promise data type (their naming of those predates the different use of the same term in JavaScript) and |delay| and |force| to create and evaluate them, which the library here reimplements as |lazy-seq| and |realized-lazy-seq|. Perhaps this introduces a promise with a different type tag, which would be one ingredient to help build a generic sequences type, but since it uses a make-lazy-seq that appears to be provided from outside the library, I'm not sure (the article doesn't go into specifics, either.) Also, on a smaller note, why lazy-each and not lazy-for-each (which would be consistent with traditional naming in Scheme)?
In Lazy Sequences in Scheme (2012)

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.