当前位置: 首页 > 知识库问答 >
问题:

泛化所有函子的“序列”?

田鸿彩
2023-03-14

我有这样的代码

fmapM :: Monad m => (a -> m b) -> (t, a) -> m (t, b)
fmapM f (id, e) = do 
  ev <- f e
  return (id, ev)
fmapM :: (Monad m, Functor f) => (a -> m b) -> f a -> m f b

编辑:我已经意识到hugs的旧版本已经实现了这个功能。但是,我找不到代码。现在,建议我使用Foldable/Traversable来实现同样的效果。

共有1个答案

巫欣荣
2023-03-14

您要查找的函数是traverse,来自data.traversable:

traverse :: (Applicative f, Traversable t) => (a -> f b) -> t a -> f (t b)

请注意,您不能遍历任何函数--例如,(r->)--因此有一个单独的遍历函数子类。还要注意,您不需要monad--只需要application(这个泛化很有用)。

 类似资料:
  • 我有一个带有几个实现类的通用接口,需要通过Json序列化和反序列化这些类。我正试图开始与Jackson合作,使用完整的数据绑定,没有太多运气。 示例代码说明了这个问题: 调用会导致以下异常: 组织。科德豪斯。杰克逊。地图JsonMappingException:未找到类测试$Success的序列化程序,也未找到创建BeanSerializer的属性(为了避免异常,请禁用SerializationC

  • 这是保存过程开始的地方。我定义了一个抽象方法,以后在运行时已知的类中实现。 这里我知道的类型,我想调用一个方法。 所以问题是ConfigurationPersistenceHelper中的方法。运行此方法时,配置中得到的不是而是。 我知道我可以在每个具体应用程序类的方法中实现反序列化器逻辑。但这会导致大量重复代码。这是我目前的解决方案。 此外,我知道我可以将类型从(其中类型在运行时仍然可用)传递给

  • 我需要将包含类型为Pair的对象的列表序列化为xml 首先,我创建了一个类PairList来保存对的列表,然后我创建了一个实际的类,它表示一对两个值,key和value。 然后,我尝试序列化它: 不幸的是,我遇到了一个异常:。欢迎任何关于如何避免此异常并序列化该类的想法。 如果我选择不序列化ttype和utype字段(通过将其设置为受保护或私有),则序列化有效。我不明白为什么它不想序列化类型字段。

  • 我正在学习TypeScript,目前正在尝试创建一个通用排序函数。 我有两个接口: 而我现在的函数看起来是这样的: 上面的代码工作,但我得到警告: 没有与此调用匹配的重载。重载5中的1’(值:字符串|数字|日期):日期),导致以下错误。“T[K]”类型的参数不能分配给“string | number | Date”类型的参数。类型“T[keyof T]”不可分配给类型“string | numbe

  • 问题内容: 我正在使用GSON 1.4,并使用两个通用对象序列化对象,如下所示 。当我对它进行反序列化时 可悲的是我得到了 java.lang.IllegalArgumentException:无法将java.util.ArrayList字段…设置为java.util.LinkedList 这是为什么 ?GSON文档指出,如果我使用object.class参数进行序列化,则它支持泛型。任何想法?谢

  • 我有一个Api,Api如下所示: 如果响应是ok,那么结构将以关键字开头,例如: 问题是:我如何为父类创建一个反序列化器,它也会反序列化子类(作为我的第二种方法),或者我如何用Gson创建一个泛型类,这样包装在周围的每个tyoe都可以与它一起使用,比如: public class DataObjectDeserializer implements JsonDeserializer{