3 ms·
We are using maps all over the place in the server, and so far nothing has been annoying. I gotta say though that lack of infix custom operators for the monadi
by DuLR10 2y ago
We are using maps all over the place in the server, and so far nothing has been annoying.
I gotta say though that lack of infix custom operators for the monadic bind is a pain.
- klibertp 2y agoTake a look at Erlang's "parse transforms" which would allow you to implement some syntactic sugar. That's what is used to implement qlc, the query language for ETS/Mnesia - that one adds new semantics to list comprehensions, but you can modify any part of the syntax you want. Also, Elixir supports macros and infix operator overloading - have you considered using it? If you know Erlang's stdlib and BEAM, switching to Elixir (and back) is almost painless. Not sure which monads you needed, but `with` macro is built-in, and it's a monadic bind for Option types (well, more or less). Adapting it for other monads shouldn't be hard.
- DuLR10 2y agoThanks, I will for sure take a look!
- klibertp 2y agoFor reference (for the "parse transform" approach in Erlang): https://github.com/rabbitmq/erlando https://github.com/rabbitmq/erlando - it doesn't look maintained, but it's probably still usable; otherwise, you might get some inspiration from the code :) This also (ab)uses list comprehension syntax: write_file(Path, Data, Modes) -> Modes1 = [binary, write | (Modes -- [binary, write])], do([error_m || Bin <- make_binary(Data), Hdl <- file:open(Path, Modes1), Result <- return(do([error_m || file:write(Hdl, Bin), file:sync(Hdl)])), file:close(Hdl), Result]). (if one of the calls returns `{error, Reason}` tuple, the execution terminates and the tuple is returned; otherwise, `{ok, Value}` tuple is unpacked)