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 | fpure(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
将单个函数应用于列表的每个元素。