Для расширения модуля F# просто создайте другой модуль с тем же именем:
module Seq =
let myMap f s = seq { for x in s do yield f x }
Seq. // see your stuff here alongside normal stuff
Мне кажется, что вы пытаетесь превратить указатель, переданный в функцию, в аргумент шаблона, не являющийся типовым, что, я боюсь, не сработает (см. Комментарии к вашему вопросу
Что вы могли бы сделать, так это сохранить указатель на функцию в объекте функции. Похоже, что компилируется следующее:
#include <boost/bind.hpp>
#include <boost/function.hpp>
struct X {};
template <class T>
bool process(X) { return true; }
template <class C, class T1, class Func>
struct wrap1
{
typedef bool result_type;
Func f;
wrap1(Func f): f(f) {}
bool operator()(C* c, X x)
{
return (c->*f)(process<T1>(x));
}
};
template<class C, typename T1>
inline // there are more for T1..TN
boost::function<bool (C*, X)> make_fn(bool (C::*f)(T1))
{
return boost::bind(wrap1<C, T1, bool (C::*)(T1)>(f), _1, _2);
}
struct A
{
bool f1(bool) { return true; }
};
void test()
{
A a;
X x;
make_fn(&A::f1)(&a, x);
}
Однако я не уверен, хорошо ли это и как вы создадите остальные оболочки. Для последнего вы можете просто получить компилятор, поддерживающий вариативные шаблоны. :)