diff --git a/src/language/ASTNodeDataTypeBuilder.cpp b/src/language/ASTNodeDataTypeBuilder.cpp
index 8e52fddfdd64797f90c039771c6a36b522e01aab..7b249e79c58e0d36712d9d99c35bfed1be856e2e 100644
--- a/src/language/ASTNodeDataTypeBuilder.cpp
+++ b/src/language/ASTNodeDataTypeBuilder.cpp
@@ -199,6 +199,12 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n)
         throw parse_error(message.str(), n.begin());
       }
     } else if (n.is<language::function_evaluation>()) {
+      if (n.children[0]->m_data_type != ASTNodeDataType::function_t) {
+        std::ostringstream message;
+        message << "invalid function call\n"
+                << "note: '" << n.children[0]->string() << "' is not a function!" << std::ends;
+        throw parse_error(message.str(), n.begin());
+      }
       std::cout << rang::fgB::red << "returned type of function evaluation is incorrect" << rang::style::reset << "\n";
       n.m_data_type = ASTNodeDataType::double_t;
     } else if (n.is<language::B_set>() or n.is<language::Z_set>() or n.is<language::N_set>() or