从范畴论的角度来看,函子是一对映射(一个在对象之间,另一个在范畴的箭头之间),遵循一些公理。 我假设每个函子实例都类似于数学定义,即可以映射对象和函数,但Haskell的Functor类只有将函数映射的fmap函数。 为什么呢? 更新:换句话说: 每种Monad类型M都有一个函数ret...
据我了解,函子是两个范畴之间的映射,例如从中的对象到中的对象,其中和是范畴。在Haskell中,有一个名为Hask的范畴,其中对象是Haskell类型,态射是Haskell函数。然而,Functor类型类具有函数fmap,它将这些类型(因此是对象而不是范畴本身)之间进行映射:fmap :: (...
最近有一个问题,大致涉及Haskell类之间的边界。我举了Handler作为一个没有合理Apply实例的有效Functor的例子。 class Functor f => Apply f where (<.>) :: f (a -> b) -> f a -&g...
STL函数对象的实现方式如下: template<class T> struct less{ bool operator()(T const& lhs, T const& rhs){ return lhs < rhs; } }; 这使得我...
我正在观看介绍Control.Lens的视频。 这让我想知道为什么需要在Setter类型中用函子包装东西。 它(大致)的定义如下: type Control.Lens.Setter s t a b = (Functor f) => (a -> f a) -> s ->...
想将 boost::bind 传递给一个期望普通函数指针的方法(具有相同的签名)。typedef void TriggerProc_type(Variable*,void*); void InitVariable(TriggerProc_type *proc); boost::function...
我遇到了这样一种情况:我的代码可以从使用类似Functor和Applicative的抽象类型中受益,但是对于形式为(* -> *) -> *的类型。定义一个高阶类型函数可以使用RankNTypes来实现,像这样:class HFunctor f where hfmap ::...
class foo { public: bool operator () (int & i) { return true; } }; int main() { foo(WhyDoesThisCompile); return 0;...
我知道Haskell中很多名称都受范畴论术语启发,我正在尝试确切地理解类比的起点和终点。 类别Hask 我已经知道Hask不一定是一个范畴,因为严格/惰性和seq的一些技术细节,但现在我们先将其放在一边。 为了清晰起见, Hask的对象是具体类型,即kind为*的类型。 这包括函数类型...