我有功能f与签名f :: [a] -> StateT Int Reader b [c],和f'与签名f' :: a -> StateT Int Reader b [c]

在F(非常简化的)计算看起来像这样:

f [] = return []
f (s:st) = f' s >>= \x ->
           f st >>= \y ->
           return $ ...

和在地方的......我想回[c] x与单子东西缠++[c]部分y一部分。结果 有没有一种可能实现,如果没有手动展开xy并再次手动一起把结果?我需要一个列表单子是我的单子堆栈底部得到简单的代码?读者单子显然不是MonadPlus类的一个实例。

有帮助吗?

解决方案

我不明白你的意思,通过展开xy

我将具有最后一行作为

return (x ++ y)

我误解你想要什么?

其他提示

您也可以简单地定义

f = fmap concat . mapM f'

mapM f' xs产生型m [[c]],其中xs :: [a]m = StateT Int (Reader b),然后fmap concat符连接的列表 “的单子内部”。的值)

两者f' sf st是在一个单子,即StateT Int Reader b值。所以,你已经有x :: [c]y :: [c],你只需要编写return (x ++ y),戴夫韩丁说。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top