diff --git a/src/language/ASTBuilder.cpp b/src/language/ASTBuilder.cpp
index 239da703c87bcf1e5d1802e2019635213ed519b8..9ab4cd7a6be344f1c9d5d2bdc4e4ddd377584135 100644
--- a/src/language/ASTBuilder.cpp
+++ b/src/language/ASTBuilder.cpp
@@ -209,6 +209,8 @@ using selector =
                                                      real,
                                                      literal,
                                                      name,
+                                                     name_list,
+                                                     expression_list,
                                                      B_set,
                                                      N_set,
                                                      Z_set,
diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp
index 646842bf3af00fa04b6f7a2363d4fff2f5f3314e..f45d46ccb84be654f7d131b40c5fa461fd52f32b 100644
--- a/src/language/PEGGrammar.hpp
+++ b/src/language/PEGGrammar.hpp
@@ -206,7 +206,11 @@ struct declaration : if_must< TYPESPECIFIER, NAME, opt< if_must< seq< one< '=' >
 struct type_expression : list_must< TYPESPECIFIER, one< '*' > >{};
 
 struct type_mapping : seq< type_expression, RIGHT_ARROW, type_expression >{};
-struct function_definition : seq< NAME, RIGHT_ARROW, expression >{};
+
+struct name_list : seq< open_parent, list_must< NAME, COMMA >, close_parent >{};
+struct expression_list : seq< open_parent, list_must< expression, COMMA >, close_parent >{};
+
+struct function_definition : seq< sor< name_list, NAME >, RIGHT_ARROW, sor< expression_list, expression > >{};
 
 struct let_declaration : if_must< LET, NAME, COLUMN, type_mapping, COMMA, function_definition >{};