module checkNoUnusedFormalParameters {
    
    function f_0 ( 
        in someType someParName, //bad 
        out template someOtherType someOtherParName, //bad 
        out someOtherType someYetAnotherParName, //bad
        inout timer timerParName, //bad
        inout portType portParName //bad
    ) {
    }

	type record t_t { //neutral
		integer f1
	}

	template t_t t_templ  :={ //neutral
		f1 := 0
	}

	template t_t t_templ2 (integer x1)  :={ //good
		f1 := x1 
	}

	template t_t t_templ3 (integer x1)  :={ //bad
		f1 := 2 
	}
	
	template t_t t_templ4 (integer x1)  :={ //bad
		f1 := 2 
	}

	template t_t t_templ5 (template templateType t1)  :={ //good
		f1 := t1
	}

	template t_t t_templ6 (integer x1, integer y2) modifies t_templ2 :={ //good
		f2 := y2
	}

	template t_t t_templ7 (integer x1, integer y2) modifies t_templ2 :={ //bad
		f2 := 2 
	}

	template t_t t_templ8 (template templateType t1, template templateType t2) modifies t_templ5 :={ //good
		f2 := t2
		 
	}



    function f_1 ( inout timer p_t ) { //good
    	p_t.start(10)
    }

    function f_2 ( inout portType p_p ) { //good
    	p_p.send(integer:0); 
    	p_p.send(t_t:{0});
    }

    function f_3 ( inout omit templateType p_t ) { //good
    	p_p.send(p_t);
    }

    function f_4 ( inout template templateType p_t ) { //good
    	var integer x := 1;
    	p_p.send(integer:x);
    	p_p.send(p_t);
    	p_p.send(t_templ);
    	p_p.send(t_t:{0});
    	p_p.send(0);
    	p_p.send("x");

    }

    function f_5 ( inout template ( value ) templateType p_t ) { //bad
    }

	external function fx_1 (charstring y1, integer x2); //neutral

    function f(charstring b, integer a){ //bad 2x
//    	var integer c := a;
    }


}