En Monads for natural language semantics, Chung-Chieh Shan montre comment les monades peuvent être utilisées pour donner une restitution bien uniforme des comptes standard de différents types de phénomènes de langage naturel (interrogatifs, focus, intensionality, et quantification). Il définit deux opérations de composition, A_M
et A'_M
, utiles à cette fin.Une signature de type inhabituelle
Le premier est simplement ap
. Dans la monade powerset ap
est l'application de la fonction non déterministe, ce qui est utile pour gérer la sémantique des interrogatives; dans la monade du lecteur, elle correspond à l'analyse habituelle de la composition extensionnelle;
Ceci est logique. L'opération de composition secondaire, cependant, a une signature de type qui ressemble à bizarre pour moi:
(<?>) :: (Monad m) => m (m a -> b) -> m a -> m b
(Shan l'appelle A'_M
, mais je vais l'appeler <?>
ici.) La définition est ce que vous attendez de les types; elle correspond assez près à ap
:
g <?> x = g >>= \h -> return $ h x
Je pense que je peux comprendre comment cela fait ce qu'il est censé dans le contexte du papier (poignée verbes question de prise pour interrogatives, servir composition intensionnel, etc.). Ce qu'il fait n'est pas terriblement compliqué, mais c'est un peu bizarre de le voir jouer un rôle central ici, puisque ce n'est pas un idiome que j'ai vu auparavant chez Haskell.
Rien d'utile n'apparaît sur Hoogle pour m (m a -> b) -> m a -> m b
ou m (a -> b) -> a -> m b
.
Est-ce que ceci semble familier à n'importe qui d'autres contextes? Avez-vous déjà écrit cette fonction?
'chose f = ap f. return' – yairchu
J'ai été confus un moment parce que j'ai effectivement écrit un combinateur '(>)' non apparenté, comme 'liftA2 (\ b t e -> si b puis t else e)'. –