小编Leo*_*o D的帖子

为什么州和读者monad功能,而作家monad是一个元组?

我是一个Haskell新手,我认为我理解monad和他们的机制(至少对于列表,州,也许,作家和读者monad),但我想理解为什么他们已经按照他们的方式定义,或者为什么他们必须是他们的方式,以帮助我思考他们的直觉.

具体来说,阅读是什么让读者或状态monad需要是函数(即\s -> (a,s)),而不仅仅是像作者monad(ie (w,a))这样的数据?

另外,编写器monad可以用作状态monad,其中日志用作状态的字符串表示,只要MonadPlus不使用该功能?与编写器monad一起使用的monadic函数是否允许查看当前日志并随意修改,或者只是编写器monad的bind函数允许查看日志?

另外,为什么monad是用monadic函数定义的a -> m b,而不是类型m a -> mb?函数从基类型转换为monad包装类型有什么自然意义?

谢谢你的回答.

monads state haskell functor

14
推荐指数
2
解决办法
2158
查看次数

monad相关性定律中的未绑定变量

使用ghci我计算:

Prelude> let m = [1,2]
Prelude> let ys = [4, 5, 6]
Prelude> m >>= (\x -> ys >>= (\y -> return (x, y)))
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6)]
Run Code Online (Sandbox Code Playgroud)

上面的monadic表达似乎不符合monad关联性法则的任何一方:

(m >>= f) >>= g ? m >>= (\x -> f x >>= g)
Run Code Online (Sandbox Code Playgroud)

我想知道monad关联性如何应用于表达式:

m >>= (\x -> ys >>= (\y -> return (x, y))) 
Run Code Online (Sandbox Code Playgroud)

因为return (x,y)关闭周围的函数和包含它的那个函数,似乎在关联性定律的左侧存在的中间monad (m >>= f)在这个例子中不存在.

monads closures haskell associativity

1
推荐指数
1
解决办法
139
查看次数

标签 统计

haskell ×2

monads ×2

associativity ×1

closures ×1

functor ×1

state ×1