gpt4 book ai didi

haskell - Haskell中扩展类型类的含义是什么?

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

在 Haskell 中,有一个类型类叫做 Extend .

该类定义如下

class Functor w => Extend w where
extended :: (w a -> b) -> w a -> w b
Extend 的每个实例类应具有以下属性:
extended f . extended g = extended (f . extended g)

我可以看到它与 Functor 的相似之处.特别是, Functor的属性(property) fmap f . fmap g == fmap (f . g)看起来类似于 Extend .

你会怎么解释 Extend ?它的意义何在?它是否使任何计算更容易?使用 Extend 时做了什么抽象?

最佳答案

ExtendComonad没有能力extract .如果你想这样想的话,它是一个“几乎是共通的”。问“comonads 的含义是什么”这个问题可能更有帮助。然后,当您找到几乎是共生词的东西时,您就知道可以使用 Extend来代表它。我推荐 Neighborhood of Infinity通过示例介绍 comonads。

我们对 Monad 也有类似的事情和 Applicative , 顺便一提。 BindMonad但没有 return , 和 ApplyApplicative但没有 pure .您可以在同一个 semigroupoids 中找到这两个类。你链接的包。

举个例子,非空列表形成一个comonad,用duplicate = tailsextract = head .然后extend f = fmap f . duplicate .如果我们有 NonEmpty 就可以了,但如果列表可能为空,extract = head不再是一个完整的函数。我们还有duplicateextend ,所以 []可以 Extend但不能是Comonad . (感谢@phadej 提供此示例!)

关于haskell - Haskell中扩展类型类的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48312945/

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