Win32 non-backwards compatible API change

Tamar Christina tamar at zhox.com
Fri Jan 27 12:53:21 UTC 2017


Hi All,

I want to revive and push forward a change first proposed in 2014 for an API
change in the Win32 package.

The discussion at that time took place here https://github.com/haskell/win32/issues/24

In short, In the Windows API it is common that when a function accepts a pointer to something,
that NULL also be valid and defaults to some action. Such an example is the FindWindow call.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx

HWND WINAPI FindWindow(
  _In_opt_ LPCTSTR lpClassName,
  _In_opt_ LPCTSTR lpWindowName
);

In this case, both the ClassName and the WindowName are allowed to be NULL.

The Haskell binding to this function is findWindow :: String -> String -> IO (Maybe HWND).
So we've lost the ability to use the default parameters.

The proposal is to change such functions to accept Maybe:

findWindow :: String -> String -> IO (Maybe HWND)

becomes

findWindow :: Maybe String -> Maybe String -> IO (Maybe HWND)

Which also would more accurately match the original API. This is of course a backwards incompatible change.

Any objections to this change?

Thanks,
Tamar





More information about the Libraries mailing list