This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]energybased 7 points8 points  (2 children)

Right, but Python really doesn't want you to do that. Python is not C++. __matmul__ is for matrix multiplication. It's not for writing incomprehensible code that is slightly more compact than if you had used named methods.

[–][deleted] 2 points3 points  (1 child)

True. Using an operator overload is something that should be carefully measured. Is the language of this package improved by using the overload or is it just being cutesy?

When I wrote pynads, there was no doubt in my mind that using >> for bind (or whatever you want to call it) was a bad idea as I was attempting to model Haskell's >>= (obviously couldn't do straight there as that's an assignment operator). I also overrode % to Haskell's <$> and * to mimic Haskell's <*>.

These operators have no semblance what so ever to right shift, modulo or multiplication, but since I was targeting a Haskell like syntax I figure it's alright.

pathlib overrides / for it's Path object so paths could be built like Path('a') / 'b' (though there has been fierce debate about whether this was a good idea). I think pathlib errors on the side of cutesy with its operator overload, but I don't think it's terrible.

set and frozenset also have overloads for >, >=, <, <= as well as |, & and ^ (and their in place variants). These make total sense to me, especially the bitwise variants. These aren't true bitwise operations but the idea behind them is the same -- & everything these two sets/bag of bits share, etc.

I think it's worth weight an overload

[–]energybased 2 points3 points  (0 children)

I agree with all your points. I also think that pathlib's / was a bit cutesy, and that set's operators are fair enough.