7
votes

Menu texte simple dans Haskell

J'aimerais savoir quelle est la meilleure solution pour créer un menu simple avec une fonctionnalité décrite ci-dessous (pseudo code) comme si j'étais habitué à: XXX

ou peut-être toutes les autres idées sur Comment faire un menu non dans le motif décrit ci-dessus?


0 commentaires

3 Réponses :


8
votes

quelque chose comme xxx

vous pouvez probablement diviser l'énumération dans "choix" afin que vous ne disposez que des descriptions et des fonctions à l'intérieur, un peu de séparation, mais cela fonctionne. L'évaluation de la fonction "Menu" vous permettra de choisir quoi faire!


3 commentaires

si facile :) Une autre question: Pourriez-vous expliquer la première ligne: (putsrtln .....) im Newbie à Haskell et ne savez pas que les opérateurs aiment. $ et ainsi de suite. Si ce n'est pas un problème pour vous, cela m'aiderait.


Je viens de modifier ma réponse et je l'ai rendue plus flexible! Pas testé de quelque manière que je viens de l'écrire, mais vous devriez voir ce que j'ai fait là-bas :). À propos de cette ligne PutStrln: J'ai essentiellement écrit "PutStrln (mal énumère (cartographier les choix de Concatnums))" sans les paranthèses :)


Ouf, je ne peux tout simplement pas poster des pièces de code incomplètes - une vérification supplémentaire pour une entrée non numérotée et une entrée hors limites :)



11
votes

Il y a quelques paquets frais pour des méthodes de haut niveau pour construire des systèmes de ligne de commande en général:

  1. UI-Command : Cadre pour les programmes de commandes de commande conviviaux
  2. haskeline : une interface de ligne de commande pour une entrée utilisateur, écrite dans HASKELLL.
  3. HCL : bibliothèque de haut niveau pour les interfaces de ligne de commande de construction.

    J'aime particulièrement la commande ui, car il s'agit d'un cadre complet pour vos outils de ligne de commande: il envoie aux fonctions de gestionnaire que vous fournissez à chaque commande et fournit également une aide spécifique à la commande à l'utilisateur.

    Le but est un sentiment poli, plutôt qu'un sentiment pirateux.


2 commentaires

Bonjour, merci de l'aide, après avoir téléchargé ce package UI-Command et Alldependances lorsque je tente de compiler l'exemple, j'ai une erreur: Impossible de trouver le module `Control.monad.Trans ': il a été trouvé dans plusieurs packages: MONADS-FD-0.1. 0.1 MTL-1.1.0.2 Comment puis-je résoudre ce problème?


Vous aurez besoin de désinscrire des monads-fd je pense. GHC-PKG Unregister monads-fd.



2
votes

Voici un autre exemple qui est un peu plus de menu, en ce sens qu'il lit directement des caractères simples dans Réactions, sans demander à l'utilisateur d'appuyer sur ENTER.

import System.IO
import System.Exit

import Control.Monad


main = forever (printMenu >> readChoice >>= menuAction)

printMenu = putStr "\np)rint 'Hello, world!'\ne)xit\nyour choice: " >> hFlush stdout

readChoice = hSetBuffering stdin NoBuffering >> hSetEcho stdin False >> getChar

menuAction 'p' = putStrLn "\nHello, world!"
menuAction 'e' = exitSuccess
menuAction _ = hPutStrLn stderr "\nInvalid choice."


0 commentaires