很抱歉,如果问题不是很清楚。我不确定用它来表达它的最佳方式(随意编辑!)。我认为一个例子是最清楚的:
我试图根据Haskell definition定义Monad概念。绑定运算符(>>=
)要求Monad
类型A
可以绑定到一个函数,该函数接受A
并返回Monad
类型{ {1}}。我可以用B
typedef定义A
,但如何在我的概念中定义类型value_type
?
B
在上面的示例中,我将如何替换函数&lt;&gt;中的template <typename M>
concept bool Monad()
{
return requires(M m, Function<_1, ValueType<M>> f) {
// (>>=) :: m a -> (a -> m b) -> m b
{ m >>= f } -> M
}
}
。概念
这是否足以将调用f的结果限制为任何类型的Monad?