相关疑难解决方法(0)

作为applicative functors(Haskell/LYAH)

学习Haskell的第11章介绍了以下定义:

instance Applicative ((->) r) where
    pure x = (\_ -> x)
    f <*> g = \x -> f x (g x)
Run Code Online (Sandbox Code Playgroud)

在这里,作者参与了一些不寻常的挥手("<*>的实例实现有点神秘,所以如果我们只是[在没有解释它的情况下显示它的话]它是最好的").我希望这里的某个人可以帮助我搞清楚.

根据应用类定义, (<*>) :: f (a -> b) -> f a -> f b

在实例中,替换((->)r)f:r->(a->b)->(r->a)->(r->b)

所以第一个问题是,我该如何从这种类型中获得f <*> g = \x -> f x (g x)

但即使我认为最后一个公式是理所当然的,我也很难同意我给GHCi的例子.例如:

Prelude Control.Applicative> (pure (+5)) <*> (*3) $ 4
17
Run Code Online (Sandbox Code Playgroud)

这个表达式看起来与之相符f <*> g = \x -> f (g x)(请注意,此版本x之后不会出现f. …

haskell applicative

36
推荐指数
3
解决办法
4017
查看次数

标签 统计

applicative ×1

haskell ×1