23得票5回答
为什么Functor类没有返回函数?

从范畴论的角度来看,函子是一对映射(一个在对象之间,另一个在范畴的箭头之间),遵循一些公理。 我假设每个函子实例都类似于数学定义,即可以映射对象和函数,但Haskell的Functor类只有将函数映射的fmap函数。 为什么呢? 更新:换句话说: 每种Monad类型M都有一个函数ret...

23得票3回答
Haskell中的functor与范畴论中的functor有什么关系?

据我了解,函子是两个范畴之间的映射,例如从中的对象到中的对象,其中和是范畴。在Haskell中,有一个名为Hask的范畴,其中对象是Haskell类型,态射是Haskell函数。然而,Functor类型类具有函数fmap,它将这些类型(因此是对象而不是范畴本身)之间进行映射:fmap :: (...

23得票3回答
有没有一个函子无法成为守法的应用函子?

最近有一个问题,大致涉及Haskell类之间的边界。我举了Handler作为一个没有合理Apply实例的有效Functor的例子。 class Functor f => Apply f where (<.>) :: f (a -> b) -> f a -&g...

22得票2回答
为什么STL的函数对象本身是模板而不是它们的函数调用运算符?

STL函数对象的实现方式如下: template<class T> struct less{ bool operator()(T const& lhs, T const& rhs){ return lhs < rhs; } }; 这使得我...

22得票2回答
对于Control.Lens.Setter来说,将类型包装在functors中是否是冗余的?

我正在观看介绍Control.Lens的视频。 这让我想知道为什么需要在Setter类型中用函子包装东西。 它(大致)的定义如下: type Control.Lens.Setter s t a b = (Functor f) => (a -> f a) -> s ->...

22得票5回答
将boost :: function降级为一个普通的函数指针

想将 boost::bind 传递给一个期望普通函数指针的方法(具有相同的签名)。typedef void TriggerProc_type(Variable*,void*); void InitVariable(TriggerProc_type *proc); boost::function...

21得票1回答
Functors和Applicatives适用于类型(* -> *) -> *的情况

我遇到了这样一种情况:我的代码可以从使用类似Functor和Applicative的抽象类型中受益,但是对于形式为(* -> *) -> *的类型。定义一个高阶类型函数可以使用RankNTypes来实现,像这样:class HFunctor f where hfmap ::...

21得票1回答
将双射映射提升为函子

也许我没有看到显而易见的事情,但我正在尝试清理一个使用Scalaz 7的项目中的一些样板文件,并且我没有找到一个似乎非常简单和可能有用的拼图。 假设我们有两种类型之间的双向对应关系:case class Foo(x: Int) case class Bar(i: Int) import s...

21得票1回答
为什么使用一个未声明的变量调用函数对象会起作用?

class foo { public: bool operator () (int & i) { return true; } }; int main() { foo(WhyDoesThisCompile); return 0;...

20得票3回答
Haskell的“Const”函子是否类似于范畴论中的常函子?

我知道Haskell中很多名称都受范畴论术语启发,我正在尝试确切地理解类比的起点和终点。 类别Hask 我已经知道Hask不一定是一个范畴,因为严格/惰性和seq的一些技术细节,但现在我们先将其放在一边。 为了清晰起见, Hask的对象是具体类型,即kind为*的类型。 这包括函数类型...