I'm trying to learn about Mercury programming language. Here's a quick list of things I learned recently about it.
Getting a Windows version of the Mercury compiler
I was able to get a version of the Mercury compiler by downloading a "Release of the day" version from here: http://dl.mercurylang.org/index.html.
I just followed the instructions from INSTALL file. The only requirement is to have a Cygwin version installed.
Operations are associated with a data type
For example the predicate for performing an operation N times is defined in the
int module (
Predicates can be partially applied
Mercury supports a mechanism similar to currying in other languages.
For example, in the following invocation to
int.fold_up we're not specifying values or variables for the last three arguments(these are resolved by the application inside
:- pred write_pixel_data( io.binary_output_stream::in, array(int)::in, int::in, % width int::in, % height int::in, % padding int::in, % idx io::di, io::uo) is det. . . . int.fold_up(write_pixel_data(Stream, ImgData, Width * 3, Height, (RowWidth - (Width * 3))),0,(RowWidth*Height) - 1,!IO)
Bitwise operators look nice!
For example bitwise "and" look like:
io.write_byte(Stream, (IntValue >> 8) /\ 0xFF,!IO),
Code for this post can be found here