public ProgramConstruct(ICollection<FunctionConstruct> functions, ExectuableBlockConstruct block)
        {
            Contract.Requires(functions != null);
            Contract.Requires(block != null);

            Functions = functions;
            Block = block;
        }
        public FunctionConstruct(IdentifierConstruct name, ICollection<IdentifierConstruct> parameters, ExectuableBlockConstruct controlBlock) {
            Contract.Requires(name != null);
            Contract.Requires(parameters != null);
            Contract.Requires(controlBlock != null);

            Name = name;
            Parameters = parameters;
            ControlBlock = controlBlock;

        }