Необходимо учитывать, для чего используются эти функции и как они перекрываются с другими функциями.
Точно так же могут быть реальные технические барьеры с определенными функциями. Например, вам может потребоваться автоматический вывод типа, но данная функция может сделать это неразрешимым.
Так что по большей части вы можете делать все, что захотите, но стоит подумать о том, как они будут использоваться. Возможно, попробуйте написать некоторые программы на языке, использующем все функции, и посмотрите, могут ли они быть реализованы в терминах друг друга и правильно ли они работают.
Некоторое время назад я написал сообщение в блоге о некоторых соображениях по поводу языкового дизайна, которые могут быть полезны:
http://www.plsadventures.com/2009/09/why-programming-language-design-is-hard.html
Если вы говорили с юридической точки зрения, то да, это, вероятно, хорошо.