gpt4 book ai didi

haskell - 这个简单的函数叫什么?

转载 作者:行者123 更新时间:2023-12-02 16:14:35 24 4
gpt4 key购买 nike

您已经见过以下函数吗?这叫什么?它有什么用?它可以比仅针对 StateT 更通用地定义吗?

simpleFunction (StateT f) = StateT $ (\s -> return (f s, s))

顺便说一下,ghc 给它的类型是 Monad n => StateT s m a -> StateT s n (m (a, s))

还有一个替代定义:

simpleFunction m = do
s <- get
mapStateT (\l -> return (l, s)) m

最佳答案

拥有两个像 n (m a) 这样的单子(monad)通常不是很有用(组合可能不是单子(monad)等)。所以我想更有用的版本应该是这样的(Monad m) => StateT s m a -> StateT s m (a, s)

这可以推广到 m 上的任意状态转换器:

import Control.Monad
import Control.Monad.State

f1 :: (MonadState s (t m), MonadTrans t, Monad m) => StateT s m a -> t m (a, s)
f1 (StateT f) = get >>= lift . f

由于我们唯一需要的是 get,我们可以进一步概括为:

f2 :: (MonadTrans t, Monad m, Monad (t m)) => t m s -> StateT s m a -> t m (a, s)
f2 g (StateT f) = g >>= lift . f

如果你确实需要有两个 monad,也许 MFunctor会很有用 - 像 hoistgeneralize 这样的函数允许在 monad 之间切换。

关于haskell - 这个简单的函数叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142666/

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