/// <summary> /// Visits a <see cref="MonadAbstraction" /> node. /// </summary> /// <param name="node">Node to visit.</param> /// <returns>Result of visiting the node.</returns> protected internal override MonadMember VisitMonadAbstraction(MonadAbstraction node) { var inner = Visit(node.Inner); if (inner != node.Inner) { return(MakeMonadAbstraction(node, inner)); } return(node); }
/// <summary> /// Visits a <see cref="MonadAbstraction" /> node. /// </summary> /// <param name="node">Node to visit.</param> /// <returns>Result of visiting the node.</returns> protected internal override MonadMember VisitMonadAbstraction(MonadAbstraction node) { var elementType = VisitType(node.ElementType); var inner = Visit(node.Inner); if (inner != node.Inner || elementType != node.ElementType) { return(MakeMonadAbstraction(node, elementType, inner)); } return(node); }
/// <summary> /// Makes a <see cref="MonadAbstraction" /> with the given children. /// </summary> /// <param name="node">Original query expression.</param> /// <param name="inner">Inner query expression.</param> /// <returns>Representation of the original query expression.</returns> protected sealed override MonadMember MakeMonadAbstraction(MonadAbstraction node, QueryTree inner) { return(DefaultQueryExpressionFactory.Instance.MonadAbstraction(node.ElementType, inner)); }
/// <summary> /// Creates a textual representation of the MonadAbstraction with the given children. /// </summary> /// <param name="node">Original query expression.</param> /// <param name="inner">Inner query expression.</param> /// <returns>Representation of the original query expression.</returns> protected override string MakeMonadAbstraction(MonadAbstraction node, string inner) { return(string.Format(CultureInfo.InvariantCulture, "@MonadAbstraction({0})", inner)); }
/// <summary> /// Makes a <see cref="MonadAbstraction" /> with the given children. /// </summary> /// <param name="node">Original query expression.</param> /// <param name="elementType">Element type for the resulting operator.</param> /// <param name="inner">Inner query expression.</param> /// <returns>Representation of the original query expression.</returns> protected virtual MonadMember MakeMonadAbstraction(MonadAbstraction node, Type elementType, QueryTree inner) { return(DefaultQueryExpressionFactory.Instance.MonadAbstraction(elementType, inner)); }