gpt4 book ai didi

haskell - monad的类型构造函数和返回函数之间的区别(在Haskell中)

转载 作者:行者123 更新时间:2023-12-01 09:19:28 26 4
gpt4 key购买 nike

我正在尝试找出 Haskell 中的 monad,但还没有走得太远。

我找到了 https://en.wikibooks.org/wiki/Haskell/Understanding_monads#cite_note-1和其他几个教程/解释,但似乎没有一个解释类型构造函数和返回函数之间的区别。

据我了解

  • type 构造函数从基本数据类型的给定值构造一个 monad。所以它有点像 Java 中的普通构造函数,它从给定参数构建一个新实例。
  • return 函数将类型构造函数应用于基本数据类型的给定值并返回构造的 monad。

那么让两个功能基本相同的意义何在?

编辑所以使用 Maybe-monad 的例子,

  • country = Just "China":(构造函数)为值“China”创建 monad。
  • return "China":返回对应China值的monad,所以基本上就是包含"China"值的monad。

一般来说,我将 monad 理解为值的容器。monad 的一种用法是将简单/现有的计算组合到更复杂的计算中。

最佳答案

类型构造函数是返回类型的类型级函数。 Maybe 是一个类型构造函数,它接受一个类型参数并返回一个类型,例如Maybe StringMaybe Int

数据构造函数用于创建特定类型的值。对于某些类型 Maybe a,这些构造函数是 JustNothing

data Maybe a = Just a | Nothing

return 函数从“普通”值构造一元值,例如

return 1 :: Maybe Int
return "s" :: [String]

所以在Monad类的定义中

class Monad m where
return :: a -> m a

m 是类型构造函数,例如(IO, Maybe, []) 用于构造类型,而 return 是构造函数m a 类型的单值值来自 a 类型的值。

对于 Maybe 的 monad 实例,return 构造了一个 Maybe a 的值,只有 i.e.

instance Monad Maybe where
return x = Just x

所以如果你知道你正在处理也许,你使用哪个并不重要。但是,return 具有更通用的类型,因为它可以用于为某些 monad m 构造任意值 m a

关于haskell - monad的类型构造函数和返回函数之间的区别(在Haskell中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36206281/

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