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

具有不同错误类型的嵌套Either

越运锋
2023-03-14
Either e1 (Either e2 a)

我想要一个函数,该函数可以执行以下操作:

Either e1 (Either e2 a) -> Either e2 a

更一般地说,是否存在与此模式匹配的typeclass?

共有1个答案

袁鸿畅
2023-03-14

你所要求的实际上是没有意义的。我们来看看你的功能类型:

f :: Either e1 (Either e2 a) -> Either e2 a

假设这个函数是total(Haskell中的绝大多数函数确实应该是),我们需要为任何类型为e1(e2 a)的输入生成一个类型为e2 a的值。为了尝试并实现这一点,让我们考虑输入可以进入的所有“形状”。

结果表明,e1(e2 a)类型的值可以有三种可能的形状:

Left _
Right (Left _)
Right (Right _)
f (Right x) = x
f (Left x) = ???
g :: e1 -> Either e2 a
f :: (e1 -> e2) -> Either e1 (Either e2 a) -> Either e2 a
f g = either (Left . g) id
import Data.Bifunctor

f :: (e1 -> e2) -> Either e1 (Either e2 a) -> Either e2 a
f g = join . first g
f :: Either e1 (Either e2 a) -> Either (Either e1 e2) a
f = either (Left . Left) (either (Left . Right) Right)
f :: Either e1 (Either e2 a) -> Either (Either e1 e2) a
f (Left x) = Left (Left x)
f (Right (Left x)) = Left (Right x)
f (Right (Right x)) = Right x
 类似资料:
  • 我试图理解新的Java8流,并且花了好几天的时间在Java8流中的集合上传输嵌套的foreach循环。 是否可以重构以下嵌套的foreach循环,包括Java-8-Streams中的if条件? 如果是,它会是什么样子。 非常感谢你的帮助。 溴

  • 我有一个查询,我想给一个购物车对象的嵌套结构作为输入。我还定义了与静态编程语言中的数据类非常相同的结构。 这是: 这是相应的类别: 但是,启动应用程序上下文始终会产生: 引起原因:org.springframework.beans.factory.BeanCreation异常:错误创建在类路径资源中定义的名为“图形QLSchema”的bean[图形ql/kickstart/工具/引导/图形QLJa

  • 问题内容: 还有其他一些SO问题在讨论可以使用Eclipse的编译器而不是javac进行泛型编译的问题(即Java:泛型在Eclipse和javac中处理不同,而泛型可以在Eclipse中编译和运行,但不能在javac中编译)-但这看起来就像一个稍微不同的人。 我有一堂课: 我还有一个带有方法的类,该方法接受来自以下类型的任意对象: 这在Eclipse中可以正常工作,但是当我使用进行了干净的构建时

  • 本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结

  • 本文向大家介绍Java中定义了哪些不同类型的嵌套类?,包括了Java中定义了哪些不同类型的嵌套类?的使用技巧和注意事项,需要的朋友参考一下 在Java中,可以在另一个类中定义一个类,此类称为嵌套类。对于内部类,我们可以使用访问修饰符,例如private,public,protected或default;对于外部类, 可以使用default或public访问修饰符。 Java中定义了两种类型的嵌套类

  • 问题内容: 我想在嵌套的静态接口中使用泛型类。我的目标是做这样的事情: 但是我得到一个错误:无法对非静态类型T进行静态引用。如果进行一些更改(如下所述),我可以在接口内部使用泛型,但是我想避免使用此方法,因为编写同一个类两次:一次用于MyClass,一次用于MyInterface。 谢谢。 编辑 :我想这样做: 要么 问题答案: 静态嵌套类或嵌套接口(顺便说一句,始终是静态的)与其外部类(或接口)