use implicit rules for function types