Prim's algorithm for minimal spanning trees
Java developers prefer intention revealing names as opposed to mathematical single letter identifiers. So it might be better to use edge instead of e and so on.
Most common type parameter name in Java is T as opposed to a, so maybe using at least 't' (if not a normal name like nodeType) to prevent confusion and better explain ADTs.
loop might look like a syntax construct, especially because its definition follows afterwards.
Just a detail, but initialSet instead of startSet would be clearer to me - same holds for startNode.
I would replace where with let, because it would make one construct less (although idiomatic one) and it is a convention in mainstream languages to write declarations/definitions before use.
I would also adjust 'loop' signature, so the solution isn't between input arguments - I wold make it the last argument.
I wouldn't use the apostrophe ('), although I understand it is common in math and theory of programming, but among backquoutes (`) for infix operators it might be confusing.
I think it would help if the function composition operator (.) was surrounded with whitespace - it would better show that it is a different kind of '.' than the one in import Data.List(sort, deleteBy), which might be easier to understand for Java developers.


I am not a Haskell guru and I don't have 10+ years of Java experience, so take this as a personal opinion. It might also help quite a lot to show the same implemented in Java - the benefits of features you describe and syntax constructs would be clearer. Feel free to comment on this answer, I am open to discussion.