需要知道<*> <$>和.在哈斯克尔做

dev*_*vel 10 haskell

嗨伙计可以有人解释我作为一个haskell noob运营商:

(.) :: (b -> c) -> (a -> b) -> a -> c
(<$>) :: Functor f => (a -> b) -> f a -> f b
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

做?当我看到签名时,我什么都不知道,通过一个简单易懂的解释来帮助我.

Mar*_*coS 14

我也在学习Haskell,我的建议是看看你学习哈斯克尔的好事!,更确切地说:

在本质上:

  • (.)是函数组合:如果你有g :: a -> b,f :: b -> c然后f . g本质上是f(g(x)):首先使用a获得a 然后使用它来获得agabfbc

  • <$>使用一个函数获取a并返回一个b函数,一个包含一个函数的函子,a它返回一个包含一个函数的函子b.所以<$>是一样的fmap :: (a -> b) -> f a -> f b

  • <*>需要一个仿函数包含一个函数获取a和返回b,并函子中含有一种a,它返回一个仿函数包含一个b.所以从仿函数<*>提取函数并将其应用于仿函数内的参数,最后将结果返回到仿函数中

请注意,您在书籍章节中找到的解释比我上面的尝试更好

  • [RWH](http://book.realworldhaskell.org/read/code-case-study-parsing-a-binary-data-format.html#binary.functor)和[Typeclassopedia](http:// www. hashell.org/haskellwiki/Typeclassopedia)阅读LYAH后也是这个问题的好消息来源. (3认同)

tyl*_*eir 6

也许你通过例子(像我一样)学习,所以这里有一些你可以在GHCI中搞乱的简单.

(.) - Function Composition 
-- (.) :: (b -> c) -> (a -> b) -> a -> c
> f = (+1)
> g = (*2)
> a = f . g
> a 0
1 -- f( g( 0 ) ) or (0 * 2) + 1
> b = g . f
> b 0
2 -- g( f( 0 ) ) or (0 + 1) * 2


<$> - Functor
-- (<$>) :: Functor f => (a -> b) -> f a -> f b
> a = (*2)
> b = Just 4
> a <$> b
Just 8


<*> - Applicative
-- (<*>) :: Applicative f => f (a -> b) -> f a -> f b
> a = Just (*2)
> b = Just 4
> a <*> b
Just 8
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助.