Truly generalised Functor, Applicative, and Monad
beark opened this issue · comments
Presently, functions generalised to the above mentioned concepts must be implemented twice to be truly general. This is because some data types match the signature
template<template<typename> class F, typename A, typename B>
void example(F<A> a, F<B> b);
while others instead match
template<
template<typename,typename...> class F,
typename A,
typename B,
typename...Ts>
void example(F<A,Ts...> a, F<B,Ts...> b);
Something should be worked out to solve this, having to write duplicates of every function is not acceptable.