gpt4 book ai didi

scala - 单个 monad 的多个 flatMap 方法?

转载 作者:行者123 更新时间:2023-12-04 14:29:50 25 4
gpt4 key购买 nike

定义多个 flatMap 有意义吗? (或 >>=/bind 在 Haskell 中)Monad 中的方法?
我实际使用的极少数单子(monad)(OptionTryEither 投影)只定义了一种 flatMap 方法。

例如,定义 flatMap 是否有意义? Option上的方法这将采用产生 Try 的函数?这样Option[Try[User]]将被展平为 Option[User]举个例子? (考虑到丢失异常不是问题......)

或者一个 monad 应该只定义一个 flatMap方法,采用产生相同类型单子(monad)的函数?我猜在这种情况下 Either预测不会是单子(monad)吗?他们是吗?

最佳答案

我曾经认真思考过这个问题。事实证明,这样的构造(除了失去所有单子(monad)功能)并不是很有趣,因为它足以提供从内部容器到外部容器的转换:

joinWith :: (Functor m, Monad m) => (n a -> m a) -> m (n a) -> m a
joinWith i = join . (fmap i)

bindWith :: (Functor m, Monad m) => (n a -> m a) -> m a -> (a -> n a) -> m a
bindWith i x f = joinWith i $ fmap f x

*Main> let maybeToList = (\x -> case x of Nothing -> []; (Just y) -> [y])
*Main> bindWith maybeToList [1..9] (\x -> if even x then Just x else Nothing)
[2,4,6,8]

关于scala - 单个 monad 的多个 flatMap 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16407356/

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