gpt4 book ai didi

haskell - Reader Applicative 的应用功能

转载 作者:行者123 更新时间:2023-12-03 12:24:29 26 4
gpt4 key购买 nike

看着reader or environment applicative来自 Brent Yorgey 的 UPenn 2013 Lecture :

instance Functor ((->) e) where
fmap = (.)

instance Applicative ((->) e) where
pure = const
f <*> x = \e -> (f e) (x e)

我试图获得 Applicative 实例的直觉。

鉴于:
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
那么如何 \e -> (f e) (x e)结果是 f b类型?

最佳答案

如果我们替换 ((->) e)f (记住这是一个以 e 作为参数类型的函数),我们得到:

(<*>) ::     f    (a -> b)  ->    f     a  ->    f    b
(<*>) :: ((->) e) (a -> b) -> ((->) e) a -> ((->) e) b -- Replace f with ((->) e)
(<*>) :: (e -> (a -> b)) -> (e -> a) -> (e -> b) -- Apply ((->) e)
(<*>) :: (e -> a -> b) -> (e -> a) -> e -> b -- Remove unneeded parentheses

要记住的关键是 ((->) e) ae -> a 相同.这个符号起初看起来有点误导。

这种类型的唯一实现是您在问题中提供的实现。这个定义也可以写成:
f <*> x = \e -> f e (x e)

或者,使用前缀表示法:
(<*>) f x e = f e (x e)

关于haskell - Reader Applicative 的应用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727575/

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