Я бы сказал, что ваши функции образуют квадрат противоположностей, потому что они выражают количественную оценку, точнее - количественную оценку определенного предиката по парам элементов из складного контейнера [примечание 1]. С этой точки зрения наличие оппозиционных квадратов с участием модальных операторов отражает то, как модальности можно понимать как формы локального количественного определения. Я не вижу более прямой связи между вашими функциями и традиционными методами.
В более широком смысле, большинство подходов к выражению модальности в Haskell, о которых я знаю, опосредовано на теоретическом уровне изоморфизмом Карри-Говарда - см. Интересные операторы в Haskell, которые подчиняются модальным аксиомам за несколько ссылок на это. Я никогда не слышал о попытках думать о свойствах структур данных с точки зрения модальностей; однако я не думаю, что это как-то имеет смысл [примечание 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: Например, возможная семантика мира может быть проработана с использованием графиков, как наглядно показано в этой демонстрации .