on master help sign in
handle atom function with no arguments
c0dfe20AgentM
src/lib/ProjectM36/RelationalExpression.hs+4−1
@@ -503,12 +503,15 @@ evalAtomExpr tupIn context (FunctionAtomExpr funcName arguments) = do
503 let functions = atomFunctions context
503 let functions = atomFunctions context
504 func <- atomFunctionForName funcName functions
504 func <- atomFunctionForName funcName functions
505 argTypes <- mapM (typeFromAtomExpr (tupleAttributes tupIn) context) arguments
505 argTypes <- mapM (typeFromAtomExpr (tupleAttributes tupIn) context) arguments
506− _ <- mapM (uncurry atomTypeVerify) $ init (zip (atomFuncType func) argTypes)
507 let expectedArgCount = length (atomFuncType func) - 1
506 let expectedArgCount = length (atomFuncType func) - 1
508 actualArgCount = length argTypes
507 actualArgCount = length argTypes
508+ safeInit [_] = []
509+ safeInit [] = [] -- different behavior from normal init
510+ safeInit (_:xs) = safeInit xs
509 if expectedArgCount /= actualArgCount then
511 if expectedArgCount /= actualArgCount then
510 Left (AtomFunctionArgumentCountMismatch expectedArgCount actualArgCount)
512 Left (AtomFunctionArgumentCountMismatch expectedArgCount actualArgCount)
511 else do
513 else do
514+ _ <- mapM (uncurry atomTypeVerify) $ safeInit (zip (atomFuncType func) argTypes)
512 evaldArgs <- mapM (evalAtomExpr tupIn context) arguments
515 evaldArgs <- mapM (evalAtomExpr tupIn context) arguments
513 pure $ (evalAtomFunction func) evaldArgs
516 pure $ (evalAtomFunction func) evaldArgs
514evalAtomExpr _ context (RelationAtomExpr relExpr) = do
517evalAtomExpr _ context (RelationAtomExpr relExpr) = do