Part of this work was done by @the-dr-lazy in
https://github.com/ajnsit/purescript-typeable/pull/3.
GOOD:
Now there is no more dependence on dictionaries being passed as function
arguments at runtime.
BAD:
1. However, we still depend on the dictionaries being stable at runtime.
2. We now also assume that the output of the new function `makeTag` will
never be cached.
Changes due to PureScript 0.15
1. Remove constraints from foreign imports.
2. Remove support for records due to the new apartness check.
3. Convert CommonJS to ESmodules
Others:
Format all files.
TODO:
Records are currently not supported because of the new apartness check
in PureScript 0.15. The instance (Typeable (f a)) then partially
overlaps with (Typeable (Record r)). Even though (a::Type) and (r::Row
Type), that still isn't enough for the compiler to disambiguate. There
is no way that I can see to specify an instance for all (f a) where f is
NOT Record.