我试图弄清楚Haskell中的monad但是还没有太远.
我找到了https://en.wikibooks.org/wiki/Haskell/Understanding_monads#cite_note-1 和其他一些教程/解释,但似乎都没有解释类型构造函数和返回函数之间的区别.
据我所知
return function将类型构造函数应用于基本数据类型的给定值,并返回构造的monad.那么让两个函数基本相同的重点是什么呢?
编辑 所以使用Maybe-monad的例子,
country = Just "China":(构造函数)为值"China"创建monad. return "China":返回对应于中国值的monad,所以它基本上是包含"China"值的monad .一般来说,我理解monad是值的容器.monad的一种用法是将简单/现有计算组合到更复杂的计算中.
类型构造函数是返回类型的类型级函数.Maybe是一个类型构造函数,它接受一个类型参数并返回一个类型,例如Maybe String,Maybe Int等等.
数据构造函数用于创建特定类型的值.对于某些类型,Maybe a这些构造函数是Just和Nothingie
data Maybe a = Just a | Nothing
Run Code Online (Sandbox Code Playgroud)
该return函数从'普通'值构造monadic值,例如
return 1 :: Maybe Int
return "s" :: [String]
Run Code Online (Sandbox Code Playgroud)
所以在Monad类的定义中
class Monad m where
return :: a -> m a
Run Code Online (Sandbox Code Playgroud)
m是一种类型的构造例如(IO,Maybe,[]其被用于构造类型),而return是它构造类型的一元值的函数m a从类型的值a.
对于monad实例Maybe,使用ie return构造一个值Maybe a
instance Monad Maybe where
return x = Just x
Run Code Online (Sandbox Code Playgroud)
所以,如果你知道你正在处理Maybe它,那么你使用哪个并不重要.但是,return它具有更通用的类型,因为它可以用于m a为某些monad 构造任意值m.
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |