I spent the last couple of nights putting together a simple Markdown to PDF formatter using Tomas Petricek’s FSharp.Formatting project and the PdfSharp-MigraDoc library.
To use this library, you can either grab the source from the GitHub repository or get it from Nuget using the following command:
To use the library from F#, you can use the Markdown type defined in the FSharp.Markdown namespace (from the FSharp.Formating library), once you’ve opened the FSharp.Markdown.Pdf namespace you’ll have access to two static extension methods:
- TransformPdf – accepts a string as input and outputs the resulting PDF to a local file path or to a specified Stream.
- WritePdf – accepts a MarkdownDocument generated by the Markdown.Parse method, and outputs the resulting PDF to a local file path or to a specified Stream.
You can also use this library from C#, however, the static extension methods mentioned above is not accessible in C# because type extensions defined in F# are compiled differently to standard extension methods you find in C# (with far more possibilities I might add, such as extension properties, and static methods, for instance!) and is not recognized by the C# compiler..
You can still access the same functionalities using a MarkdownPdf type, with two static methods:
- Transform – equivalent to Markdown.TransformPdf.
- Write – equivalent to Markdown.WritePdf.
You can see an example output here with the corresponding Markdown here.
After a long Easter holiday filled with late night coding sessions I find myself wide awake at 2am… good job I’ve still got my pluralsight subscription and a quick look at the Algorithms and Data Structures course again at least gave me something to do to relax the mind with some back-to-school style implementation of common sorting algorithms in F#:
Whilst not the most performant implementations I’m sure, I hope at least it goes to show how easily and concisely these simple algorithms can be expressed in F#! Now back to that sleep thing…
This is a F# implementation of the fast algorithm to count the number of inversions in an array, outlined in the Algorithms : Design and Analysis Part 1 course on Coursera.
Here’s a simple F# implementation of the merge sort algorithm (using mutable arrays) outlined in the Algorithms : Design and Analysis Part 1 course on Coursera.
So refreshing to be writing simple sorting algorithms years after university, still fun!
With the official release of .Net 4.5 and Visual Studio 2012, I suspect many .Net developers will be rushing to rewrite their data access or network layers (amongst many many other things!) to take advantage of the new async-await (see the excellent 101 examples here) language feature in C#, which means you’ll likely be working with the Task and Task<T> type an awful lot.
If you have F# code that needs to interop with C# that returns or awaits some task types then you’ve probably already come across the Async.StartAsTask<T> and Async.AwaitTask<T> methods for converting between F#’s Async<T> and Task<T> types. Curiously, there are no equivalent methods on the Async class for converting between Async<unit> and Task types.
So, to fill in the gaps ourselves, here are two simple functions to do just that: