gpt4 book ai didi

haskell - 有哪些类型可以区分类别?

转载 作者:行者123 更新时间:2023-12-04 01:02:00 24 4
gpt4 key购买 nike

我仍然对所有这些类别理论的东西很熟悉,而且我看到的几乎每个例子都是关于 Maybe 或 Array 的。但我还没有找到任何区分这些类别的例子。例如,以下是一些我仍然无法回答的问题:

  • 什么是不是 Monoid 的半群?
  • 什么是可折叠但也不是可遍历的? [Duplicate]
  • 什么是一个也不是 Apply 的 Functor?
  • 什么是不是 Applicative 的 Apply?
  • 什么是不是链的应用?
  • 什么是不也是 Monad 的链?
  • 一个不是 Monad 的应用程序是什么? [Duplicate]

  • 我正在通过 JavaScript FantasyLand 的上下文学习这些东西所以这就是我从那里得到术语的地方——我知道这些东西有不同的词。

    最佳答案

    1. 什么是非 Monoid 的半群?

    Cactus 给出了一个不是幺半群的半群的一个很好的例子。任何类型的非空(有限)列表表示该类型上的自由半群。另一个例子是 Data.Void.Void ,这不是 Monoid因为它没有任何元素,因此没有标识元素。另一个例子是加法下的正整数集合。

    3. 什么是非 Apply 的 Functor?

    一个Functor那不是 ApplyHandler .

    data Handler a where
    Handler :: Exception e => (e -> IO a) -> Handler a

    instance Functor Handler where
    fmap f (Handler h) = Handler (\e -> f <$> h e)

    给定 Handler f :: Handler (a -> b)Handler g :: Handler a , 你有
    f :: e1 -> IO (a -> b)
    g :: e2 -> IO a

    在哪里 e1e2是(可能不同的)异常类型。您需要创建 h :: e3 -> IO b对于某些异常类型 e3 .没有真正明智的方法来做到这一点**。

    似乎更难找到 Functor不能做成中规中矩的 Apply实例,因为 Apply只有一个定律,因此承认各种奇怪的事情, Applicative会拒绝。

    4. 什么是不是 Applicative 的 Apply?

    6. 什么 Applicative 不是 Monad?
    Map kIntMap .另外, (,) aConst aaSemigroup但不是 Monoid .类似地,其他一些类型适合接受 Apply 的较弱上下文的模式。和/或 BindApplicativeMonad , 分别。

    5. 什么是不是链的应用?
    ZipListApply但不是 Bind .我不知道 Chain 是什么是。

    ** 一种半明智的方式可能如下所示:
    data P x y = P x y deriving (Show, Typeable)
    instance (Exception x, Exception y) =>
    Exception (P x y)
    instance Apply Handler where
    Handler f <.> Handler g =
    Handler (\(P e1 e2) -> f e1 <*> g e2)

    我认为这符合 Apply法律,但我还不能完全确定。

    关于haskell - 有哪些类型可以区分类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36274369/

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