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 (int.fold_up, int_fold_down
).
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 int.fold_up
):
:- 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