gpt4 book ai didi

haskell - 通过 ReaderT 获取带有镜头的元组子集

转载 作者:行者123 更新时间:2023-12-02 03:01:26 26 4
gpt4 key购买 nike

我想这样玩元组和镜头:

myfct :: ReaderT (a,b,c,d,e) m a -> ReaderT (a,c,d) m a
myfct = zoom ...

能够将输入元组修改为它的子集...

伪代码将是这样的:

zoom (_1,_3,_4)

最佳答案

正如 @dfeuer 所说,你可能想写:

myfct' :: Monad m => ReaderT (a,c,d) m a -> ReaderT (a,b,c,d,e) m a

这将执行一个只需要访问上下文 (a,c,d) 的操作,并将其提升为可以在提供 (a,b) 的更大上下文中运行的操作,c,d,e)。这可以使用 magnify 编写,如下所示:

myfct' = magnify . to $ \(a,_,c,d,_) -> (a,c,d)

另一方面,如果您确实是所写的内容:

myfct :: Monad m => ReaderT (a,b,c,d,e) m a -> ReaderT (a,c,d) m a

那么你将不得不解释这应该做什么。特别是,如果您有一个访问 b::String 组件的操作:

action :: Reader (Int,String,Int,Int,Int) Int
action = asks $ \(_,b,_,_,_) -> length (b :: String)

您希望如何在没有 b::String 的上下文中运行它?

test' :: Int
test' = runReader (myfct action) (1,2,3)

关于haskell - 通过 ReaderT 获取带有镜头的元组子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59881907/

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