DEV Community

Discussion on: Your bash scripts are rubbish, use another language

 
bloodgain profile image
Cliff

Yes, I was talking about composing processes like you would at the shell.

I see what you're saying about point-free programming, though. I still think the Unix style is the cleanest, most natural implementation of point-free programming, and I think the fact that it is a genuine stream of processing is a big point in its camp. However, if your Haskell example is accurate, I like it. The examples the Wikipedia article give seem less intuitive and a lot more LISP-y.

I think most programmers would probably find the use of compose in Python a lot less intuitive than nested generator functions, and it's certainly an inelegant implementation of point-free programming. I also wonder if it can eliminate some of the advantages of the generators? It probably doesn't based on the sample implementation, but I'd have to think carefully about if applying partial like that would have unintended consequences, at least in some cases.

Thread Thread
 
xtofl profile image
xtofl • Edited

I think so, too. You can make a nice 'fluent' DSL out of it, though.


class Chain:
        def __init__(self, *fns):
                self.fns = fns
        def __or__(self, fn):
                return Chain(*self.fns, fn)
        def __call__(self, arg):
                return reduce(lambda ret, f: f(ret), self.fns, arg)

Chain() | read_file | create_filter("https://") | web_get

def double(x):
        return 2*x

def fromstr(s):
        return int(s)

def inc(x):
        return x+1

def repeat(n):
        return lambda s: s * n

c = Chain() | fromstr | inc | double | str | repeat(3)

assert c("1") == "444"
assert c("20") == "424242"
Enter fullscreen mode Exit fullscreen mode
Thread Thread
 
taikedz profile image
Tai Kedzierski

..... ingenious.

I'm still trying to brain this, its possibilities and its limitations but... wow.

A bit of commentary would be very welcome :-)

Thread Thread
 
xtofl profile image
xtofl

I'll expand it in a full fledged post :) Or 'leave it as an exercise'?

Thread Thread
 
bloodgain profile image
Cliff

I either love this or hate it, I can't decide. Bravo, sir!

Thread Thread
 
xtofl profile image
xtofl

Somehow, I have hit the 'publish' button on dev.to/xtofl/i-want-my-bash-pipe-34i2.

Thread Thread
 
bloodgain profile image
Cliff

I've only skimmed the article so far, but it looks like a good one. I like the title! 😁

Thread Thread
 
taikedz profile image
Tai Kedzierski • Edited

@xtofl , @Cliff , I have finally gotten round to this, I think you will be gleefully dismayed.

dev.to/taikedz/shellpipe-shellpipe...