我已经看到了许多不同的方式来做标称类型的打字,但它们似乎都在某种程度上是不够的。我希望所有这些财产都有:
必须有明确的编译器错误信息(不一定是简洁的,但如果是这样的话)编译器错误信息,沟通哪些不透明类型,例如Type 'GBP' is not assignable to type必须是真正唯一的,以避免意外匹配类似的不透明类型,即没有__tag__键,必须使用unique symbol。必须能够具有使用不透明类型的安全泛型函数,共享相同的基础基元
我有一个数据类型和附带的函数,看起来非常像某种遍历。a -> f (Bar b)) -> Foo a -> f (Foo b)
almostTraverse f (MkFoo x y) = MkFoo <$> f x <*> f y 假设Bar是某种不透明的类型有没有一些类型类是almostTraverse的泛化?它不是来自MonoTraversable的otraverse,因为applicative中的结果类型不必与输入类型完