This allows us to identify module by their type and it is also better to store the module type as part of the module instead of having it hardcoded in factory.hpp
By default they will return false for calls to `input`