8得票5回答
"Last" 是一个自由幺半群吗?

自由幺半群通常被视为“列表幺半群”。但我对可能给我们带来自由幺半群的其他可能结构感兴趣。 首先,让我们回顾一下自由幺半群的定义。我从未完全理解如何将自由幺半群定义为遵循幺半群法则且没有其它规则的结构。我们如何证明某些东西遵循以上所述的没有规则的法则?或者这只是一种直觉? 无论如何,我们将要...

8得票2回答
检测函数对象(functor)和Lambda表达式的特征

我该如何检测零元和一元函数指针、std::function对象和functor(包括lambda)的返回类型和参数类型? Boost的function_traits和functional traits并不能完全满足我的需求,但我可以考虑补充或替换它们。 我可以尝试像这样做: namesp...

7得票5回答
何时使用无状态类函数对象替代C风格函数?

我在SO上找到了一些有趣的函数对象的好例子,例如这个,所有令人信服的例子似乎都在定义operator()的类中使用状态。 我在书中看到一个例子,它定义了没有状态的函数调用运算符。我不禁感到这是一种尴尬的用法,普通的函数指针比在这里使用operator()更好——代码量少、变量少(你必须实例化...

13得票4回答
OCaml的模块化组件(functors):反直觉的行为

我正在尝试使用OCaml(3.12.1)模块语言进行实验,定义functor和module的签名等等,主要是按照OCaml手册第2章的示例进行操作。无意中,我遇到了一个情况,似乎我的functor和module签名的工作原理的心智模型是错误的。我试图将我遇到的情况缩小到可能的最短代码量,所以不...

14得票3回答
`x >> pure y` 是否等同于 `liftM (const y) x`?

这两个表达式y >> pure x liftM (const x) y 在Haskell中,这两个表达式具有相同的类型签名。我好奇它们是否等效,但是我既不能证明这一事实,也不能举出反例。如果我们重写这两个表达式,以便可以消除x和y,那么问题就变成了这两个函数是否等价。flip (&...

11得票4回答
在哈希映射中对每个值进行映射

我有一个哈希表。 我想遍历所有值并根据值的类型替换每个值。如果该值是整数,则将其替换为true,否则用false替换。我希望这将返回一个新的哈希表,其中每个值都更新为true或false。(defn my-function [hash-map] (loop [hash-map hash-m...

8得票1回答
在 GHCi 中,为什么我无法在 REPL 中显示 `pure 1`?

我试图将一个提升的值赋给a。 λ> :m Control.Applicative λ> let a = pure 1 当我在REPL中评估a时,它会打印1。 λ> a 1 因此,我认为可能有一个针对 a 的 show 实现方法,并尝试了以下代码: λ> s...

11得票1回答
Haskell - (+) <$> (+3) <*> (*100) $ 5 的求值

在《Learn You a Haskell for Great Good》一章中提到的函子,Lipovača说: “当我们做 (+) &lt;$&gt; (+3) &lt;*&gt; (*100) 时,我们正在创建一个函数,它将对 (+3) 和 (*100) 的结果使用 + 并返回结果...

15得票1回答
理解Data.Functor.Constant构造函数和应用法则

我对 Data.Functor.Constant 的类型构造函数感到困惑,以及它如何与 applicative 协同工作。 首先是构造函数: 当我检查 Constant :: a -> Constant a b 的类型时,我发现它接受一个 a,但返回一个 Constant a b。 b ...

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

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