众所周知,OCaml具有参数多态性,这就导致了一些局限性.Haskell通过其类型类提供了一个特殊的多态,显然,在一些情况下非常方便。众所周知,OCaml的模块和函子系统允许创建一种特殊的多态。例如,参见Shine 最近的伟大回答。
我的观点是,在Haskell中可以创建派生的几个类型类的类型。例如:
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Eq, Show
我是函数式编程的学生,如果我的问题听起来很奇怪的话,我很抱歉--我试图把我的注意力集中在函数的特定类型签名以及它们是如何实现的。
查看ap的签名(替换)
(a → b → c) → (a → b) → a → c
在这里作为
const S = f => g => x => f(x)(g(x));
我想我能理解。f是一个函数,它接受两个参数,a和b,并返回c。g是一个接受a并返回b的函数。因此,g(a)返回b,因此f(a)(b)可以编写为f(a)(g(a)),后者返回c。
g(a)是b的替代品吗?
好的,现在我要看的是另一个仍然有意义的实现:
ap(Identity(Ma
我对范畴理论的知识不是很好。所以请容忍我。
我一直在读
看到了下面的定义。
class (Category c, Category d) => Functor c d t where
fmap :: c a b -> d (t a) (t b)
我从那个网站上读到,Haskell前奏曲中的函子类型实际上是一个内函子。(上述类别中的C及d类均为Hask)
读完这一页后,我想知道。如果Haskell使用的是实数函子而不仅仅是内函子,它会更适合元编程吗?
假设我们有以下内容( Js代表Javascript)
data Js a where
litInt :: Integer -&
我已经学习了函子和单子的定义,但除了定义之外,我仍然找不出它们之间的区别。我读过一些关于这个问题的答案,在上有一个评论说
函子接受纯函数(和函数式值),而monad则采用Kleisli箭头,即返回单值(和一元值)的函数。因此,您可以链接两个单曲,而第二个单曲可以依赖于前一个单曲的结果。你不能用函子做这个。
这个评论很有趣,让我读到了它们的不同之处。但我还有一些问题。
为什么函子不能使用前一个函数的结果?既然fmap :: (a -> b) -> f a -> f b,当我用一个纯函数运行fmap时,我可以得到一个f a -> f b函数,f b依赖于f a,结果是否意
我想对这个Sum类型进行快速检查,并编写了以下代码:
data Sum a b =
First a
| Second b
deriving (Eq, Show)
instance Functor (Sum a) where
fmap _ (First x) = First x
fmap f (Second y) = Second (f y)
instance Applicative (Sum a) where
pure = Second
First x <*> _ = First x
Second _ <*> First y = Fi
fmap.fmap允许我们将“两层深”放入函子中:
fmap.fmap :: (a -> b) -> f (g a) -> f (g b)
这对应用函子也是可能的吗?假设我想通过使用Just (+5)和[1,2,3]的应用属性来组合它们。我可以想出一个显而易见的方法来做这件事,但这在我看来并不是那么微不足道。
(<*>).(<*>)没有决定性的类型签名:
((<*>).(<*>)) :: (a1 -> a2 -> b) -> ((a1 -> a2) -> a1) -> (a1 -> a2
我有一个关于修改boost::multi_index容器中的元素的问题。我所拥有的是结构,包含一些预定义的参数和一些参数,这些参数是在运行时定义的,并存储在地图中。以下是该结构的简化版本:
class Sdata{
QMap<ParamName, Param> params; // parameters defined at run-time
public:
int num;
QString key;
// more pre-defined parameters
// methods to modify the map
// a
的确如此:
λ :i Applicative
class Functor f => Applicative (f :: * -> *) where
同时:
fmap f x = pure f <*> x
-根据Applicative定律,我们可以从pure & <*>中定义fmap。
我不明白为什么每次我想要一个fmap时都要乏味地定义Applicative,如果真的可以用pure和<*>自动设置fmap的话。
我认为,如果pure或<*>在某种程度上依赖于fmap的定义,这是必要的,但我不明白他们为什么要这样做。
我正在尝试根据一个因子来划分一个数据框架。然而,即使在减去R之后,R也显示了额外的因素。
例如,在R中包含的虹膜数据集中,我希望创建一个只包含Setosa物种的子集。然而,即使经过减法,R也表明在浏览数据时有3个因素只显示Setosa。为什么会这样呢?
提前感谢
#Load Data
library(datasets)
data(iris)
#Subset specie into new data frame only containing Setosa oberservations
sub = iris[iris$Species == "setosa",]
#View s
这是这个问题的后续问题,这个问题最接近我的问题:
我正在创建一个小型React.js应用程序来研究图书馆。我收到这样的警告:
超过最大更新深度。当组件在useEffect中调用useEffect时可能会发生这种情况,但是useEffect要么没有依赖数组,要么在每次呈现时都会更改依赖项之一。
我有一个功能组件,其中有以下代码:
const propertiesMap2 = new Map([ //There is also propertiesMap1 which has the same structure
["TITLE4",
{
pro
这个问题几乎可以说是全部,但让我们看看一个简单的例子(我使用的是C++,但这个问题与任何特定的语言都没有严格的关联):
因此,假设我们有一个函子输出许多对象(例如,作为一个元组)。将输出存储到函式实例而不是返回一个长元组是一个好主意吗?
// some definitions
class OutputTypeA;
class OutputTypeB;
class OutputTypeC;
// Return everything
class FunctorThatReturns
{
std::tuple<OutputTypeA, OutputTypeB, OutputTypeC
我有点困惑,需要有人帮我理清。让我概述一下我目前的理解:
其中,E是一个内部函数,而A是某些类别:
E : A -> A.
由于Haskell中的所有类型和态射都属于Hask范畴,所以在Haskell中没有任何函子也是内函子?F : Hask -> Hask。
我有一种很好的感觉,我错了,不知怎么地把这件事简单化了,我希望有人能告诉我我是个多傻的人谢谢。
好的,我有一些javascript,基本上它从一个网站上得到一个数学公式,改变它,让它可以被eval()读取,然后通过eval,然后当我按一个键的时候,它会把答案从eval()插入到inputBox中。我有一个问题是,(例如)y+?= 20。"y“从数字1到20变化。到目前为止,代码得到了问题的答案,但形式是否定的。(示例: 14 +?= 20 = -14)。因此,我需要帮助删除我的答案中的所有"-“字符。
代码变量:
var inputBox = where the answer is (like -14 in my case)
var question = the