gpt4 book ai didi

scala - 类型构造函数是单子(monad)还是有单子(monad)?

转载 作者:行者123 更新时间:2023-12-04 16:33:18 30 4
gpt4 key购买 nike

人们通常说类型是单子(monad)。

在某些函数式语言和库(如 Scala/Scalaz)中,您有一个类型构造函数,如 List 或 Option,您可以定义一个与原始类型分离的 Monad 实现。所以基本上没有什么可以禁止你在类型系统中为同一个类型的构造函数创建不同的 Monad 实例。

  • 类型构造函数有可能有多个单子(monad)吗?
  • 如果是,你能提供任何有意义的例子吗?任何“人造”的?
  • 那么幺半群,应用程序......?
  • 最佳答案

    您通常可以在数学中找到这一切。

  • monad 是三元组 (T, return, bind)这样(...)。当bindreturn可以从上下文推断,我们只是将 monad 称为 T .
  • 幺半群是三元组 (M, e, •)这样(...)。 (...) 我们只是将幺半群称为 M .
  • 拓扑空间是一对 (S, T)这样(...)。我们只是将拓扑空间称为 S .
  • 环是一个元组 (V, 0, +, 1, ×) ...

  • 事实上,对于给定的类型构造函数 T return 可能有多种不同的定义。和 bind做一个单子(monad)。为了避免每次都引用三元组,我们可以给出 T以一种对应于 newtype 的方式来消除歧义的不同名称在 Haskell 中构建。例如: []对比 ZipList , State s对比 ReaderT s (Writer s) .

    附言说 monad 或 monoid 是三元组有些人为,特别是考虑到有不同的表示形式:我们也可以说 monad 是三元组 (T, fmap, join) ,或者幺半群是一对 (M, •) , 身份元素隐藏在额外条件中(因为它是由 唯一确定的)。数学结构的本体是一个更哲学的问题,超出了 SO 的范围(以及我的专业知识之外)。但是重新制定此类定义的更谨慎的方法可能是说“一个单子(monad)由三元组 (T, return, bind)(定义|表征)”。

    关于scala - 类型构造函数是单子(monad)还是有单子(monad)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239570/

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