此帖子在某种意义上是my previous one。 HTNW in their answer there定义了数据类型Same
和函数allEq
。因此,我认为通过定义数据类型AllDifferent
,函数allDiff
以及派生的数据类型someEq
和someDiff
,我将为{{ 1}}结构。
如果我的工作结果正确,那么如何恰当地表征这组数据类型和功能?
Foldable
答案 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中生动地说明了可以使用图来处理可能的世界语义。