- `-XNoStarIsType` is new in GHC 8.6
- can't use `-XCPP` to conditionally enable `LANGUAGE` pragmas (implicit module declaration)
- use a conditional in the .cabal file, but this is active for all modules
- need to replace all `*` with `Type` and `import Data.Kind (Type)` (works in 8.4)
* Drop repeated and potentially conflicting version constraints. Version
constraints really only need to be specified once in the cabal file
(especially when building with mafia).
* Drop the version constraint on singletons. The singletons package
version number is tightly coupled to the GHC version (due to TH)
so its safe to leave the version bounds unspecified.
This allows us to more easily get a handle to the parameters of
the shape, while still being pretty easy to cast to a KnownNat.
We can now more easily add to the gradients test, and properly
check the sizes of the head without silly hacks.
This cuts the runtime by about 70% which is nice, and it's a
better algorithm for it anyway.
I've also refactored the Convolution layer such that there's
only one actual implementation instead of two, and with that
provided a few more instances for 2D and 3D shapes in and out.
Update to the README and mnist show higher levels of composition.
Using dependent types in the deeper functions and
requiring a Proxy to reach them meant we required
dictionary passing to get the Nats. This made the
pad and crop layers almost 1000 times slower than
they should have been.
Changes shapes to get rid of the Vector, all data is
now held in contiguous memory.
Add fast c implementations for pooling layers.
Now does mnist on my laptop in 12 minutes.