Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Haskell
Haskell Forum d'entraide sur la programmation en langage fonctionnel Haskell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/11/2011, 22h18   #1
Chatanga
Membre confirmé
 
Avatar de Chatanga
 
Inscription : décembre 2005
Messages : 165
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 165
Points : 233
Points : 233
Par défaut Mélange de lift et de composition

Existe-t-il une méthode dans l’une des nombreuses bibliothèques standards d’Haskell qui fait ça ?

Code :
1
2
compose :: Monad m => (b -> c) -> (a -> m b) -> (a -> m c)
compose f g x = liftM f (g x)
Ce n’est pas le code du siècle, mais je l’utilise relativement souvent et, en règle générale, chaque fois que je ressens le besoin d’une fonction utilitaire en Haskell, je la découvre rapidement dans le standard. Comme ce n’est pas le cas ici, il est possible que mon code soit inutilement alambiqué.
Chatanga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 00h29   #2
Alp
Rédacteur
 
Avatar de Alp
 
Homme
Inscription : juin 2005
Messages : 8 586
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2005
Messages : 8 586
Points : 11 172
Points : 11 172
Ta fonction correspond aussi à
mais je ne pense pas qu'il y ait une fonction toute faite pour ça. Au pire, tu peux te créer un opérateur infixe pour ça et t'en servir à la place pour rendre le code plus clair. Ou alors à coups de
Alp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 18h22   #3
Yo Eight
Membre confirmé
 
Homme
Ingénieur développement logiciels
Inscription : mai 2009
Messages : 89
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 89
Points : 285
Points : 285
Cela est possible via l'utilisation de la structure de donnée Kleisli:

Code haskell :
1
2
newtype Kleisli m a b = Kleisli {runKleisli :: a -> m b}

où tu n'auras pas besoin de créer une fonction spécifique vu que Kleisli est un Arrow qui te fourni donc l'opérateur (>>>) qui lui même permet la composition.

Ce bout de code est équivalent à ta fonction compose.

Code haskell :
1
2
Kleisli g >>> arr f
Yo Eight est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h27.


 
 
 
 
Partenaires

Hébergement Web