我有一个遍历mytraversal
和一个函数f: a -> a
,可以按如下方式使用:mydata & mytraversal %~ f
。
但是,如果我用f: a -> m a
来代替m
,该怎么办?就我而言,这是一个状态monad,我想修改结构项,修改当前状态。
答案 0 :(得分:4)
const e = (tag, attrs, children) => {
const { dataset, ...otherAttrs } = attrs;
if (dataset) {
for (const key in dataset) {
otherAttrs[`data-${key}`] = dataset[key];
}
}
return React.createElement(tag, otherAttrs, children);
};
e("h1", {dataset: {"tippy-content": "foo"}}, ...);
所以,真的,只是
type Traversal s t a b = forall f. Applicative f => (a -> f b) -> s -> f t
应该做。如果您需要运算符,则称为(%%~)
。
mydata & mytraversal f