++ed by:
MISHIN TOBYINK SHARYANTO MARCC ZMUGHAL

8 PAUSE users

Marc Chantreux

NAME

Perlude - an attempt to port a part of Haskell prelude in Perl

SYNOPSIS

Haskell prelude miss you when you write perl stuff? Perlude is a port of the most common keywords. Some other keywords where added when there is no haskell equivalent.

Example: in haskell you can write

    nat        = [0..]
    is_even x  = ( x `mod` 2 ) == 0
    evens      = filter is_even
    main       =  mapM_ print
        $ take 10
        $ evens nat

in perlude, the same code will be:

    use Perlude;
    my $nat = enlist { state $x = 0; $x++ };
    sub is_even { ($_ % 2) == 0 }
    sub evens   { filter {is_even} shift }
    traverse {say} take 10, evens $nat

FUNCTIONS

relations between the computation world and perl

enlist

enlist transform a coderef to a lazy list.

    my $nat = enlist { state $x = 0; $x++ }

$nat is a lazy list of the naturals.

fold

consume a lazy list in an array

    my @top10nat =
        fold take 10,
        enlist { state $x=0; $x++ }

unfold

the conterpart of fold

take

take the n first elements of a lazy list

takeWhile

returns the head of a lazy list that matches a crteria.

    sub below { takeWhile { $_ < 1000 } shift }
    say for fold below 1000, enlist { state $x=0; $x++ }

drop, dropWhile

like take and takeWhile but remove elements instead of returning them

filter, apply

grep and map alike on lazy lists

    sub double { apply  { $_*2 } shift }
    sub evens  { filter { ($_ % 2) == 0 } shift }

traverse

eval the block for every element of the list.

    traverse {say} take 10, unfold 0..13;

concat

bind lazy list together.

    traverse {say} take 10, concat
    ( unfold(1..5)
    , unfold(20..67)
    );

misc. functions

definitely need other namespaces for them!

    cycle range tuple lines

missing functions

    foldl foldr

AUTHORS

  • Philippe Bruhat (BooK)

  • Marc Chantreux (eiro)

  • Olivier Mengué (dolmen)

ACKNOWLEDGMENTS

  • High five with Stéphane Payrard (cognominal) and thanks to Nicolas Pouillard (#haskell-fr@freenode) for his help about haskell lazyness.

  • French Perl Workshop 2011

  • Chartreuse Verte