Ugly! Ugly! Ugly!
HRESULT IShellExtInit::Initialize (
LPCITEMIDLIST pidlFolder,
LPDATAOBJECT pDataObj,
HKEY hProgID );
Piddlefolder indeed.
The notational conventions used in MFC (and, here, ATL) programming do convey useful information about the values being referred to, but they convey it in such an utterly graceless way that I think I’d rather not know.
class ShellExtInit a where Initialize :: a -> IORef [Item] -> IORef DataObject -> ProgId -> IO ResultCode
That’s better.

July 28th, 2005 at 2:03 pm
It’s Haskell. It defines a typeclass, ShellExtInit, members of which can be operated on using the operator Initialize. The separator…heh…the separator indicates the return value of the function, but Haskell supports partial application such that
is like this (in Python):
and
foo x y(Haskell) is likefoo(x)(y)(Python).Other notation:
IORef ais the type of a mutable cell of typea(IORef ais a parameterised type, it’s a bit like sayingIORef<a>in C++).[a]is the type of a list ofa.You would declare an actual type to be an instance of this typeclass like this:
It’s another world really. But I kinda like it there.