簡體   English   中英

單子收集,單子類型和單子手術之間有什么區別?

[英]what is difference between monadic collection, monadic type and monadic operation?

我一直在嘗試了解scala中monad的概念。 與monad相關的術語有很多。 單子類型類,單子類型,單子操作,單子集合等。所以我有諸如單子集合可以支持非單子操作的問題嗎? 是否有可能使與Scala中的monad相關的不同術語神秘化?

單子收集可以支持非單子操作嗎

一個monadic集合必須定義兩個方法: purebind 最重要的是,它必須遵守Monad的身份(左右)和結社法則。

這樣的集合是Scala中的List[A] ,它通過apply方法具有pure函數:

val l: List[Int] = List(1,2,3)

flatMapbind ):

val flat = l.flatMap(i => List(i))

法律:

左身份:

val f: Int => List[Int] = x => List(x + 1)

val x = 1
val left = List(x).flatMap(f)
val right = f(x)

left == right

正確身份:

val y = List(1)
val left = y.flatMap(List(_))
val right = y

left == right

結合性:

val f: Int => List[Int] = x => List(x + 1)
val g: Int => List[Int] = x => List(x + 2)

val list = List(1,2,3)
val left = list.flatMap(f).flatMap(g)
val right = list.flatMap(x => f(x).flatMap(g))

left == right

如您所見, List[A]還支持不屬於Monad定義的其他操作,例如map (由List[A]是monad的事實免費提供,每個monad也是函子) , filterfoldLeft等。

要回答您的問題:是的,具有monadic屬性的集合不僅可以支持monad定義的操作,還可以支持更多的操作。

更具體地說,我們可以說List[A]實現 Monad[List]類型類的monadic集合,並且因此具有monadic操作 monadic類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM