12得票1回答
可折叠 vs 可遍历

在更深入地研究Applicative时,我接触到了Traversable。虽然我已经从LYHGG了解了Foldable,但我还没有见过前者,所以我开始阅读有关Traversable的Haskell Wiki。 在阅读中,我理解了为什么Foldable.fold与Traversable.seq...

11得票3回答
标准ML的函数器范例

Standard ML中的Functor与模块系统相关,可以基于其他结构生成结构。下面是一个生成不同类型列表组合器的functor示例,但该示例存在问题: 各种类型的列表都有其优点--例如,惰性列表可以是无限长的,而连接列表具有O(1)的连接操作符。但当所有这些列表类型都符合相同的签名时,f...

10得票3回答
如何简化嵌套的映射调用?

假设我有几个嵌套的函数,例如List[Option[Int]],需要调用最内层函数的map。现在我正在使用嵌套的maps:scala> val opts: List[Option[Int]] = List(Some(0), Some(1)) opts: List[Option[Int]]...

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

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

14得票3回答
函数对象调用和函数调用的详细区别是什么?

这种方法能够奏效的关键在于for_each()函数不必假设它的第三个参数是一个函数。 它只是假定第三个参数是可以用正确的参数调用的东西。 与函数一样,适当定义的对象同样适用,并且通常比函数更好。例如,内联类的应用程序运算符要比内联作为指向函数的指针传递的函数更容易。 因此,函数对象通常比...

7得票1回答
如何创建一个返回与函数相同签名的函数对象的函数?

在c++中是否可以创建一个函数,该函数返回与函数具有相同签名的函数对象? 基本上,如何使decltype(foo) foo();合法。 或者使用函数对象:function<function<function<...(void)>(void)>(void)&gt...

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

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

7得票1回答
为什么Control.Monad.Morph.hoist需要一个Monad约束?

Control.Monad.Morph 包含: class MFunctor t where hoist :: Monad m => (forall a. m a -> n a) -> t m b -> t n b 据我所知,所包含的实例均未使用Monad m...

15得票2回答
Yoneda引理仅在理论角度上有用吗?

例如,可以通过Yoneda实现循环融合:newtype Yoneda f a = Yoneda (forall b. (a -> b) -> f b) liftYo :: (Functor f) => f a -> Yoneda f a liftYo x = ...

28得票7回答
重载“函数调用”运算符有什么用处?

我最近发现在C++中可以重载"函数调用"运算符, 这种方式看起来很奇怪,因为你需要写两对括号才能这样做:class A { int n; public: void operator ()() const; }; 然后像这样使用:A a; a(); 什么时候这个有用?