You are here: Home PIK Members Daniel Lincke Software outputs MonSys.cpp

MonSys.cpp

Plain Text icon MonSys.cpp — Plain Text, 3 KB (3700 bytes)

File contents

Concept Functor<class f> {

    template<class f, class fun1>
      requires
	Function<fun1>
    f::Apply<fun1::Codomain>  Fmap_codomain1  (f::Apply<fun1::Domain1>);

    template<class fun1>
      requires
	Function<fun1>
    Fmap_codomain1  Fmap  (fun1);

}

Concept Monad<class m> {

    template<class a, class m>
    m::Apply<a>  Mreturn  (a);

    template<class fun1, class m, class b>
      requires
    	Function<fun1>
    	SameType<fun1::Codomain, m::Apply<b>>
    m::Apply<b>  Mbind  (fun1, m::Apply<fun1::Domain1>);

}



template<class m, class fun2>
  requires
	Monad<m>
	Function<fun2::Codomain>
	SameType<fun2::Codomain::Codomain, m::Apply<fun2::Codomain::Domain1>>
	Function<fun2>
struct Macro_trj_codomain1_codomain1 {

	typedef   fun2::Codomain::Domain1  Domain1;
	typedef   List<m::Apply<fun2::Codomain::Domain1>>  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};

template<class m, class fun2>
  requires
	Monad<m>
	Function<fun2::Codomain>
	SameType<fun2::Codomain::Codomain, m::Apply<fun2::Codomain::Domain1>>
	Function<fun2>
struct Macro_trj_codomain1 {

	typedef   List<fun2::Domain1>  Domain1;
	typedef   Macro_trj_codomain1_codomain1  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};

template<class m, class fun2>
  requires
	Monad<m>
	Function<fun2::Codomain>
	SameType<fun2::Codomain::Codomain, m::Apply<fun2::Codomain::Domain1>>
	Function<fun2>
struct Macro_trj {

	typedef   fun2  Domain1;
	typedef   Macro_trj_codomain1  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};



template<class f, class fun1>
  requires
	Monad<f>
	Function<fun1>
	SameType<fun1::Codomain, f::Apply<fun1::Domain1>>
struct AddHist_codomain1 {

	typedef   List<fun1::Domain1>  Domain1;
	typedef   f::Apply<List<fun1::Domain1>>  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};

template<class f, class fun1>
  requires
	Monad<f>
	Function<fun1>
	SameType<fun1::Codomain, f::Apply<fun1::Domain1>>
struct AddHist {

	typedef   fun1  Domain1;
	typedef   AddHist_codomain1  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};



template<class m, class fun2>
  requires
	Monad<m>
	Function<fun2::Codomain>
	SameType<fun2::Codomain::Codomain, m::Apply<fun2::Codomain::Domain1>>
	Function<fun2>
struct Micro_trj_codomain1_codomain1 {

	typedef   fun2::Codomain::Domain1  Domain1;
	typedef   m::Apply<List<fun2::Codomain::Domain1>>  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};

template<class m, class fun2>
  requires
	Monad<m>
	Function<fun2::Codomain>
	SameType<fun2::Codomain::Codomain, m::Apply<fun2::Codomain::Domain1>>
	Function<fun2>
struct Micro_trj_codomain1 {

	typedef   List<fun2::Domain1>  Domain1;
	typedef   Micro_trj_codomain1_codomain1  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};

template<class m, class fun2>
  requires
	Monad<m>
	Function<fun2::Codomain>
	SameType<fun2::Codomain::Codomain, m::Apply<fun2::Codomain::Domain1>>
	Function<fun2>
struct Micro_trj {

	typedef   fun2  Domain1;
	typedef   Micro_trj_codomain1  Codomain;

	Codomain operator() (Domain1 x1) {
	}

};



template<class m, class fun2, class fun3, class fun4>
  requires
	Functor<m>
	Monad<m>
	Function<fun2::Codomain>
	SameType<fun2::Codomain::Codomain, m::Apply<fun2::Codomain::Domain1>>
	Function<fun2>
	Function<fun3>
	SameType<fun3::Domain1, List<fun2::Codomain::Domain1>>
	Function<fun4>
	SameType<fun4::Domain1, m::Apply<fun3::Codomain>>
struct Vulnerability {

	typedef   fun2  Domain1;
	typedef   fun3  Domain2;
	typedef   fun4  Domain3;
	typedef   List<fun2::Domain1>  Domain4;
	typedef   fun2::Codomain::Domain1  Domain5;
	typedef   fun4::Codomain  Codomain;

	Codomain operator() (Domain1 x1, Domain2 x2, Domain3 x3, Domain4 x4, Domain5 x5) {
	}

};



Document Actions