1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2014
    Messages : 23
    Points : 17
    Points
    17

    Par défaut Avantage de Control.Arrow ?

    Juste par curiosité ...

    A chaque fois que j’utilise ( i.e assez fréquemment ) une expression comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zip (map truc1 list) (map truc2 list)
    ghci me dit :

    Found:

    zip (map truc1 list) (map truc2 list)

    Why Not:

    map ( truc1 Control.Arrow.&&& truc2 ) list

    Je veux bien admettre que cela produit le même résultat,
    mais ( à mes yeux ) cela ne rend l’expression ni plus courte ni plus limpide !
    De plus pour que ça marche, il faut importer Control.Arrow.

    D’où ma question : Ce conseil est-il justifié ?
    ( Peut-être à la compilation, du fait que list n'est évaluée qu'une fois plutôt que deux ? )

  2. #2
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2005
    Messages : 197
    Points : 314
    Points
    314

    Par défaut

    La version proposée par hlint (et non ghci en fait) est effectivement plus performante, mais il propose la même pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map (\x -> (truc1 x, truc2 x)) list
    Qui est tout aussi performante. En règle générale, hlint propose des réécritures plus compactes et réutilisant des fonctions standards. C’est toujours élégant, mais pas nécessairement plus lisible quant on n’est pas familier d’un module utilisé. Le bon côté de hlint néanmoins, c’est qu’il force à s’intéresser à des fonctions existantes bien utiles et à adopter un style standard.

    Je veux bien admettre que cela produit le même résultat, mais ( à mes yeux ) cela ne rend l’expression ni plus courte ni plus limpide !
    Pour être honnête avec hlint, sa proposition est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map (truc1 &&& truc2) list
    Qui est bien, plus courte si on importe Control.Arrow préalablement.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2014
    Messages : 23
    Points : 17
    Points
    17

    Par défaut

    Merci Chatanga.
    Je viens de lire quelques pages de Programming with Arrows (pdf) de J.Hughes.
    Impressionnant toutes les constructions théoriques qui sont là-derrière, en fait c’est bien plus qu’une petite fonction que hlint nous propose de découvrir incidemment !

    Bonne semaine,
    bertrand

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] [Réseau] Prendre le contrôle d'un téléchargement
    Par Tchetch dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/10/2002, 14h18
  2. [VB6] [Interface] Nbre de contrôles maxi dans une feuille
    Par Midou dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/10/2002, 16h09
  3. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  4. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 10h30
  5. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo