evancz/Elm — pull request #331 by jsl (2013-11-07 17:27:44+00:00)
Title: Fix deserialization of interfaces in Prelude

We previously had to fix a corrupt Map by changing it to a List and then back into a Map. It turns out we had to do this because the original data structure on disk wasn't a Map to begin with, but a List. It was previously assumed to be a Map by the compiler because the first function that it was passed to took a type of `Interfaces` which is a Map of interface definitions. Unfortunately this didn't cause a runtime error when Haskell found out that the structure wasn't
deserialized into a Map. Instead Haskell happily created a broken Map that couldn't find members some of the members that it contained (it could find somewhere around the first half of its members, but the second half it reported as missing when they were clearly present).

Changing the type of the first function that the deserialized structure is passed to from a Map (actually Interfaces which is a type of Map) to a List allows Haskell to infer the correct type to deserialize into and makes
everything work as expected.