internal static IEnumerable <ParsedStatenode> AncestorsUntil(
     this ParsedStatenode stateNode, ParsedStatenode until)
 => stateNode.GetParents().TakeWhile(parentStateNode => !parentStateNode.Equals(until));
 internal static ParsedStatenode OneBeneath(
     this ParsedStatenode statenode, ParsedStatenode beneath)
 => statenode.Append(statenode.GetParents())
 .FirstOrDefault(parentStateNode => parentStateNode.Parent.Equals(beneath.ToOption()));