(新?)可折叠模态运算符

时间:2019-04-24 13:20:13

标签: haskell foldable

此帖子在某种意义上是my previous one。 HTNW in their answer there定义了数据类型Same和函数allEq。因此,我认为通过定义数据类型AllDifferent,函数allDiff以及派生的数据类型someEqsomeDiff,我将为{{ 1}}结构。

如果我的工作结果正确,那么如何恰当地表征这组数据类型和功能?

Foldable

1 个答案:

答案 0 :(得分:3)

我要说的是,您的函数形成了对立的平方,因为它们表达了量化-更具体地说,是对可折叠容器中成对元素上的某些谓词进行量化[注1]。从这个角度来看,涉及模态运算符的对立面反映了如何将模态理解为局部量化的形式。我看不到您的功能与传统方法之间有更直接的联系。

从更广泛的意义上说,我所知道的大多数在Haskell中表达情态的方法都是在理论上由Curry-Howard同构介导的。有关此方面的一些参考,请参见Interesting operators in Haskell that obey modal axioms。我从未听说过尝试从模式上考虑数据结构属性的尝试。但是,我认为以某种方式[注2]认为这是不可能的。


注1:从有利的角度讲“成对的元素”,将关系视为成对的元素。具体来说,我正在考虑allEq ...

的非竞争性实现
allEq :: (Foldable f, Eq a) => f a -> Bool
allEq xs = all (uncurry (==)) (liftA2 (,) xs' xs')
    where
    xs' = toList xs

...,其中,我们检查uncurry (==)的所有成对元素是否都具有某个属性,即xs

注释2:例如,this demo中生动地说明了可以使用图来处理可能的世界语义。