我有两个函数,我很困惑序列如何知道将哪个参数放入列表中,以及两者中的 Left 实际发生了什么
getMonStat :: T.Text -> IO (Either CmdError MonStat)
..
getMonStats :: [T.Text] -> IO (Either CmdError [MonStat])
getMonStats ms = do
monStats <- mapM getMonStat ms
pure $ sequence monStats
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为什么这样做?在 mapM 之后,我有monStats :: [Either CmdError MonStat]. 运行序列[m a]将其转换为m [a]. 为什么不是初始类型,[m a b]因为它CmdError也是一种类型?如果CmdError是要考虑的类型,ghc 怎么知道选择MonStat而不是CmdError列表化?或者使用类型:为什么序列转换为m a b -> m a [b]而不是m a b -> m [a] b?
从留下[Either CmdError MonStat]将最后CmdError的Either CmdError [MonStat]是什么?首先?所有这些的连接字符串?我可以测试,但我也很好奇为什么。
感谢您对此的任何见解