gpt4 book ai didi

haskell - Maybe (Haskell/LYAH) 的 Applicative 实例实现的定义

转载 作者:行者123 更新时间:2023-12-02 15:58:42 25 4
gpt4 key购买 nike

我多次尝试理解 Haskell 中的 Functor 和 Monad,但都失败了。这次当我到达 LYAH 时 Applicative Functor ,我以为我明白了Applicative typeclasses ,但是我对 Maybe 的 Applicative 实例实现有一些疑问:

instance Applicative Maybe where  
pure = Just
Nothing <*> _ = Nothing
(Just f) <*> something = fmap f something

对于上面代码片段的最后一行,我的理解如下:

(1) Just f拨给f (a->b)(<*>) :: f (a -> b) -> f a -> f b Applicative 的类定义,以及 f拨给(a->b)

(2) something拨给f a .

我的问题来自(2),为什么没有写成Just something或者类似的?

Functor instance implementation for Maybe ,有fmap f (Just x) = Just (f x)Just x拨给f afmap :: (a -> b) -> f a -> f b .

为了验证我的理解,我更改了 something进入Just something :

instance Applicative Maybe where  
pure = Just
Nothing <*> _ = Nothing
(Just f) <*> (Just something) = fmap f (Just something)

在gchi下,我尝试过

Just (+3) <*> Just 9 

并得到相同的结果Just 12 ,但是当我尝试时

Just (++"hahah") <*> Nothing` 

我收到错误

*** Exception: Functor.hs:(88,3)-(89,60): Non-exhaustive patterns in function <*>

我不知道为什么或者我错过了什么?

最佳答案

(这是我评论的延伸,并没有真正回答问题)

这个替代定义更容易理解:

instance Applicative Maybe where  
pure = Just
(Just f) <*> (Just x) = Just (f x)
_ <*> _ = Nothing

我认为你陷入了对名字 something 进行过多解释的陷阱中。我总是尝试将变量命名为 fx在应用程序的上下文中(准确地说,在 <*> 的上下文中),这就是它们的本质,一个函数和该函数所应用的值。

关于haskell - Maybe (Haskell/LYAH) 的 Applicative 实例实现的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26621326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com