p*****2 发帖数: 21240 | 1 functional scala 一定要用monad吗?
我指的是显式的用。不是隐式的用list,future就算用了。
或者说不理解monad可以算functional scala吗?
monad在实践中在scala项目中的比重有多大?比如kafka,spark这些项目。 |
c*******9 发帖数: 9032 | 2 纯functional 大多要用到monad吧。
【在 p*****2 的大作中提到】 : functional scala 一定要用monad吗? : 我指的是显式的用。不是隐式的用list,future就算用了。 : 或者说不理解monad可以算functional scala吗? : monad在实践中在scala项目中的比重有多大?比如kafka,spark这些项目。
|
c******o 发帖数: 1277 | 3 monad是一种data control structure, 是一种pattern
你当然可以不用。像java不用di,ioc一样,自己取舍。
但大家都用,自然有他的道理和好处 |
c******o 发帖数: 1277 | 4 app developer 一般不用自己design monad
理解还是需要的。 |
p*****2 发帖数: 21240 | 5
用肯定用到。我想知道的是,monad anywhere吗?到底多大程度上用。
【在 c*******9 的大作中提到】 : 纯functional 大多要用到monad吧。
|
p*****2 发帖数: 21240 | 6
大牛的项目用到多少monad?常用的是哪些?
【在 c******o 的大作中提到】 : monad是一种data control structure, 是一种pattern : 你当然可以不用。像java不用di,ioc一样,自己取舍。 : 但大家都用,自然有他的道理和好处
|
p*****2 发帖数: 21240 | 7
嗯。我想问的就是使用的问题。到底多大程度上用到了monad。常用的有哪些。库就是
scalaz吧?
【在 c******o 的大作中提到】 : app developer 一般不用自己design monad : 理解还是需要的。
|
c******o 发帖数: 1277 | 8 in real work, everything is a monad/applicative functor/functor...
like future, list, json validator, error handling, db object etc.
but I did not design or implement most of them, only used them.
even common MVC components have functional combinators (means them are some
sort of ADTs). |
p*****2 发帖数: 21240 | 9
some
这个我知道。你的意思除了这些就不用其他monad了?那不需要理解monad完全可以工作
。因为这是隐式在使用。也体会不到monad pattern的含义。
我的意思有没有必须要理解monad才能工作的地方。像scalaz应该有不少monad吧?
【在 c******o 的大作中提到】 : in real work, everything is a monad/applicative functor/functor... : like future, list, json validator, error handling, db object etc. : but I did not design or implement most of them, only used them. : even common MVC components have functional combinators (means them are some : sort of ADTs).
|
a*****e 发帖数: 1700 | 10 能够很好地理解 continuation monad 和 free monad 你就入门了。用 scala 不需要
学习 monad transformer.
常见的还有 applicative 和 monoid,这两个都还比较简单。
【在 p*****2 的大作中提到】 : : some : 这个我知道。你的意思除了这些就不用其他monad了?那不需要理解monad完全可以工作 : 。因为这是隐式在使用。也体会不到monad pattern的含义。 : 我的意思有没有必须要理解monad才能工作的地方。像scalaz应该有不少monad吧?
|
|
|
l*****t 发帖数: 2019 | 11 不知道也。你自己下个kafka,spark代码看看吧。其实如果用了var就不用提自己是纯
fp了,kafka就不是。但是纯不纯有有什么打紧?
【在 p*****2 的大作中提到】 : functional scala 一定要用monad吗? : 我指的是显式的用。不是隐式的用list,future就算用了。 : 或者说不理解monad可以算functional scala吗? : monad在实践中在scala项目中的比重有多大?比如kafka,spark这些项目。
|
c******o 发帖数: 1277 | 12 太复杂了,一般的monad( future/list/stream(其实不是monad)/Option/Try/Either)
能理解, app development足够了。
continuation/free 都是advanced topic
【在 a*****e 的大作中提到】 : 能够很好地理解 continuation monad 和 free monad 你就入门了。用 scala 不需要 : 学习 monad transformer. : 常见的还有 applicative 和 monoid,这两个都还比较简单。
|
c******o 发帖数: 1277 | 13 不理解怎么用?
monad的局限是什么? 我为啥要用它?有啥好处. 和其他的ADT 一起用怎么办?
你不用把你的logic/flow设计成monad, 但是不理解也用不好。
【在 p*****2 的大作中提到】 : : some : 这个我知道。你的意思除了这些就不用其他monad了?那不需要理解monad完全可以工作 : 。因为这是隐式在使用。也体会不到monad pattern的含义。 : 我的意思有没有必须要理解monad才能工作的地方。像scalaz应该有不少monad吧?
|
c******o 发帖数: 1277 | 14 这个也不对,immutable 可以有var,只要是local,non observable的就可以,
【在 l*****t 的大作中提到】 : 不知道也。你自己下个kafka,spark代码看看吧。其实如果用了var就不用提自己是纯 : fp了,kafka就不是。但是纯不纯有有什么打紧?
|
p*****2 发帖数: 21240 | 15 list future这些看sample code就可以用了 doc里也没有强调是monad
【在 c******o 的大作中提到】 : 不理解怎么用? : monad的局限是什么? 我为啥要用它?有啥好处. 和其他的ADT 一起用怎么办? : 你不用把你的logic/flow设计成monad, 但是不理解也用不好。
|
c******o 发帖数: 1277 | 16 那么我想合并3个list,
list(1,2,3,4)
list(2,3,4,5)
list(4,5,6,7)
用 x1*x2+x3
怎么做?
是monad 么?
【在 p*****2 的大作中提到】 : list future这些看sample code就可以用了 doc里也没有强调是monad
|
p*****2 发帖数: 21240 | 17 没看懂什么意思
不用monad就不能合并三个list?
【在 c******o 的大作中提到】 : 那么我想合并3个list, : list(1,2,3,4) : list(2,3,4,5) : list(4,5,6,7) : 用 x1*x2+x3 : 怎么做? : 是monad 么?
|
p*****g 发帖数: 7 | |
c******o 发帖数: 1277 | 19 这是很典型的实际应用coding,如果把list换成无始无终的stream就更加清楚了。
这是很典型的applicative functor, 基本上是用zip combinator.
那为啥要问monad呢? 每一个monad都是applicative functor,但是不是每个
applicative functor都是monad
的。
list 可以用monad的map, flatMap来实现,但是很不清楚。 用zip就很好。
unlimited stream根本就没法用monad的map, flatMap,不会返回的。只能用 zip
因为unlimited stream不是monad.
如果你熟悉functor, applicative functor, monad 对一个问题,你很快就能想到怎么
处理。
对于处理某个问题的lib你也很快就能上手。
【在 p*****2 的大作中提到】 : 没看懂什么意思 : 不用monad就不能合并三个list?
|
c******o 发帖数: 1277 | 20 我以前在公司brown bag时候的slide中的几页
applicative functor都是
【在 c******o 的大作中提到】 : 这是很典型的实际应用coding,如果把list换成无始无终的stream就更加清楚了。 : 这是很典型的applicative functor, 基本上是用zip combinator. : 那为啥要问monad呢? 每一个monad都是applicative functor,但是不是每个 : applicative functor都是monad : 的。 : list 可以用monad的map, flatMap来实现,但是很不清楚。 用zip就很好。 : unlimited stream根本就没法用monad的map, flatMap,不会返回的。只能用 zip : 因为unlimited stream不是monad. : 如果你熟悉functor, applicative functor, monad 对一个问题,你很快就能想到怎么 : 处理。
|
|
|
p*****2 发帖数: 21240 | 21 好 学习了
话说你没给我发书吧
不过我也不着急 而且决定入一本paper的
【在 c******o 的大作中提到】 : 这是很典型的实际应用coding,如果把list换成无始无终的stream就更加清楚了。 : 这是很典型的applicative functor, 基本上是用zip combinator. : 那为啥要问monad呢? 每一个monad都是applicative functor,但是不是每个 : applicative functor都是monad : 的。 : list 可以用monad的map, flatMap来实现,但是很不清楚。 用zip就很好。 : unlimited stream根本就没法用monad的map, flatMap,不会返回的。只能用 zip : 因为unlimited stream不是monad. : 如果你熟悉functor, applicative functor, monad 对一个问题,你很快就能想到怎么 : 处理。
|
c******o 发帖数: 1277 | 22 发了。。。
没收到?
【在 p*****2 的大作中提到】 : 好 学习了 : 话说你没给我发书吧 : 不过我也不着急 而且决定入一本paper的
|
l*****t 发帖数: 2019 | 23 我有点糊涂了。我当年学的时候老师说不能有assignment,period。后来coursera的
scala课,Martin也是只字不提var。
【在 c******o 的大作中提到】 : 这个也不对,immutable 可以有var,只要是local,non observable的就可以,
|
c******o 发帖数: 1277 | 24 一个function内部的var,只要对外部没影响。当然可以有。
比如说排序里用一个中间变量。只要最后输出的是新的immutable。那个中间变量当然
没问题。
严格的定义是referential trasperancy .
A
f(3) = 5 那在任何地方都能用 5 替代 f(3)没问题就行。 |
k****i 发帖数: 101 | 25 In haskell :)
ghci> :{
ghci| let fn' l1 l2 l3 =
ghci| map ( (x: y: z: _) -> x * y + z) .
ghci| Data.List.transpose $ [l1, l2, l3]
ghci| in fn' [1, 2, 3, 4] [2, 3, 4, 5] [4, 5, 6, 7]
ghci| ;}
[6,11,18,27]
【在 c******o 的大作中提到】 : 那么我想合并3个list, : list(1,2,3,4) : list(2,3,4,5) : list(4,5,6,7) : 用 x1*x2+x3 : 怎么做? : 是monad 么?
|