Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么fmap f xs=纯f<*&燃气轮机;xs? class函子f=>Applicative f其中 纯::a->f a ()::f(a->b)->f a->f b_Haskell_Applicative - Fatal编程技术网

Haskell 为什么fmap f xs=纯f<*&燃气轮机;xs? class函子f=>Applicative f其中 纯::a->f a ()::f(a->b)->f a->f b

Haskell 为什么fmap f xs=纯f<*&燃气轮机;xs? class函子f=>Applicative f其中 纯::a->f a ()::f(a->b)->f a->f b,haskell,applicative,Haskell,Applicative,“纯”扮演两个角色: *当你有一个 0元函数,类型。 *fmap f xs=纯f xs 我不明白为什么 class Functor f => Applicative f where pure :: a -> f a (<*>) :: f (a -> b) -> f a -> f b fmap f xs=纯f xs 我的意思是pure应该接受任何a并返回fa。但是纯f做什么呢?即使是pure(fxs)对我来说也是有意义的 但

“纯”扮演两个角色:
*当你有一个 0元函数,类型。
*fmap f xs=纯f xs

我不明白为什么

class Functor f => Applicative f where
       pure :: a -> f a
       (<*>) :: f (a -> b) -> f a -> f b
fmap f xs=纯f xs
我的意思是
pure
应该接受任何
a
并返回
fa
。但是
纯f
做什么呢?即使是
pure(fxs)
对我来说也是有意义的

但是
纯f
做什么呢

给定,
f::a->b
,我们得到
纯f::f(a->b)
最后一个
f
是任何应用函子。这将创建一个正确类型的值作为第一个参数传递给

fmap f xs = pure f <*> xs
()::f(a->b)->f a->f b
我的意思是
pure
应该接受任何
a
并返回
fa

准确地说——在本例中,您提到的
a
就是我上面提到的函数类型
a->b

但是
纯f
做什么呢

给定,
f::a->b
,我们得到
纯f::f(a->b)
最后一个
f
是任何应用函子。这将创建一个正确类型的值作为第一个参数传递给

fmap f xs = pure f <*> xs
()::f(a->b)->f a->f b
我的意思是
pure
应该接受任何
a
并返回
fa


确切地说——在这种情况下,您提到的
a
就是我上面提到的函数类型
a->b

也许一个具体的例子可以说明问题。将列表应用于应用程序<代码>将左操作数的每个函数应用于右操作数的每个值:

(<*>) :: f (a -> b) -> f a -> f b
因此
pure f xs
=
fmap f xs
,因为
对每个值应用每个函数-,而
fmap
对每个值应用一个函数:

pure (+ 1) = [(+ 1)]
pure(+1)[1,2,3]
=
[(+ 1)]  [1, 2, 3]
=

[f x | f也许一个具体的例子可以说明问题。以应用列表为例。
将左操作数的每个函数应用于右操作数的每个值:

(<*>) :: f (a -> b) -> f a -> f b
因此
pure f xs
=
fmap f xs
,因为
对每个值应用每个函数-,而
fmap
对每个值应用一个函数:

pure (+ 1) = [(+ 1)]
pure(+1)[1,2,3]
=
[(+ 1)]  [1, 2, 3]
=

[f x | f
pure(f xs)
将是一个奇怪的表达式,因为它意味着在现有的应用函子上添加一个新的最小应用层。你认为这是什么意思?我认为
(f xs)
f
应用于
xs
中的每个元素,然后
pure
将其作为一个整体,然后返回
fa
。将
f
应用于
xs
中的每个元素就是
fmap
所做的。
用于组合有状态值和有状态函数的上下文。Carry具体来说,通过对列表进行
fmap
类比,
将列表中的每个函数应用于
xs
的每个元素,其中
fmap
将单个函数应用于列表的每个元素。
pure(f xs)
将是一个奇怪的表达式,因为它意味着在现有的应用程序函子上添加一个新的最小应用程序层。你认为这是什么意思?我认为
(f xs)
f
应用于
xs
中的每个元素,然后
pure
将其作为一个整体,然后返回
fa
。将
f
应用于
xs
中的每个元素就是
fmap
所做的。
用于组合有状态值和有状态函数的上下文。Carry具体来说,通过对列表进行
fmap
类比,
将列表中的每个函数应用于
xs
的每个元素,其中
fmap
将单个函数应用于列表的每个元素。