In Монады для семантики естественного языка , Chung-Chieh Shan показывает, как монады могут быть использованы, чтобы дать хорошо единообразное повторение стандартных описаний некоторых различных типов явлений естественного языка (вопросительные, фокусирующие, интенциональность) и количественное определение). Он определяет две операции композиции, A_M
и A'_M
, которые полезны для этой цели.
Первый просто ap
. В монете powerset ap
есть недетерминированная функция приложения, которая полезна для обработки семантики вопросительных знаков; в монаде читателя это соответствует обычному анализу экстенсиональной композиции; и т.д.
Это имеет смысл. Вторичная операция компоновки, однако, имеет сигнатуру типа, которая мне просто кажется странной:
(<?>) :: (Monad m) => m (m a -> b) -> m a -> m b
(Шан называет это A'_M
, но я назову здесь <?>
.) Определение - это то, что вы ожидаете от типов; это очень близко соответствует ap
:
g <?> x = g >>= \h -> return $ h x
Мне кажется, я могу понять, как это делает то, что предполагается в контексте статьи (обрабатывать вопросительные глаголы для вопросительных слов, выполнять интенциональные композиции и т. Д.) То, что он делает, не очень сложно, но немного странно видеть, что он играет здесь такую важную роль, поскольку это не та идиома, которую я видел в Haskell раньше.
Ничего полезного в Google не приходит ни для m (m a -> b) -> m a -> m b
, ни для m (a -> b) -> a -> m b
.
Это выглядит знакомо кому-либо из других контекстов? Вы когда-нибудь писали эту функцию?