IMaybe <int> getTerm(Block block, int index) { index = ignoreReturns(index); if (ifExpressionParser.Scan(source, index)) { block.Add(ifExpressionParser.Verb); return(ifExpressionParser.Position.Some()); } while (prefixOperatorParser.Scan(source, index)) { block.Add(prefixOperatorParser.Verb); index = prefixOperatorParser.Position; } index = ignoreReturns(index); if (valueParser.Scan(source, index)) { block.Add(valueParser.Verb); index = valueParser.Position; } else { return(none <int>()); } index = ignoreReturns(index); while (postfixOperatorParser.Scan(source, index)) { block.Add(postfixOperatorParser.Verb); index = postfixOperatorParser.Position; index = ignoreReturns(index); } return(index.Some()); }