Makes it easy to write Mathematica packages in Haskell. Just write some
functions and provide a package specification in a simple DSL that
mimics that of Mathematica's mprep utility.
Data marshaling is accomplished via the MLGet and MLPut classes, which
specify types that that can be read from or written to the MathLink
connection. Instances of these classes are provided for the obvious
standard data types, including tuples, lists, and UArrays.
A Haskell function that is to be exposed to Mathematica has the type
signature (MLGet a, MLPut b) => a -> ML b. The ML monad provides
single-threaded access to the MathLink connection.
A simple example of a Mathematica package: